VC++关于动态数组问题

我想写一个类似 在一个屏幕矩形范围内找某个颜色值的点的个数 并将所有找到的点的坐标保存到一个POINT数组中  矩形范围内这样的颜色值的点的个数是不确定的 有可能没有一个 也可能是上万个 数组在声明是好像是说要用常量来确定长度的  1440*900的屏幕最大可能有上百万的点  我也不可能一开始就声明那么长的吧  为了节省资源 最希望的当然是找出一个点就让那数组长度增加1了 然后再保存它的坐标了   但是不知道怎么实现或者能不能实现  希望高手们能给小弟点高见?!下面是我写的一段代码  不过貌似后面需要用到那些点的坐标时有点问题~ POINT *pts; int xtmp=x1,countP=0,countB=0; for(;y1<y2;y1++)  for(x1=xtmp;x1<=x2;x1++)   if(GetScrPixel(x1,y1)==color)    {     countP++;     pts=new POINT[countP];      (*(pts+countP)).x=x1-x;     (*(pts+countP)).y=y1-y;    }   for(int i=1;i<=countP;i++)  if(CompareEx(*(pts+i),backcolor,errorcount))   countB++; 前面一段代码运行正常 countP数值正确但是在下面一段实用它时 除了最后一个点的数值能得到以外 前面的都没了请高手指点一下

第1个回答  2011-10-21
你的问题不难解决,你可以用动态内在分配功能。比如开始用new分得长度为10的数组p,在找到第十个点存储之后,再用new申请一个比p大十的数组pp,把p的内容拷到pp中,再用delete把p删除;等找到第二十个点存储后,用同样的方法启用p而把pp删除。如此往复,你的数组最大浪费也不过十个元素的空间!当然你要是每次不增加10个元素而只增加5个,那浪费就不超过5个元素的空间了。还可以用链表,可链表结点的结构中必须有指向下一个结点的指针,它要占4个字节,对你这样只存放一个点坐标的数组来说,内在资源的利用并不经济。我这两天碰到了同样的问题,想了许久,用此方法,只一个字——爽!
相似回答