如何使用CPtrArray的SetSize
msdn说在使用一个数组之前,先用SetSize函数建立数组的大小,并为数组分配内存。如果应用
程序没有使用SetSize函数,则向数组中增加元素会使它被频繁地再分配和拷贝。频繁再
分配和拷贝的效率很低,并且可能使内存变得很零碎。
但是我使用SetSize(10)
然后再加入Add(Ptr)时候,Size就变成了11,也就是说CPtrArray另外分配了内存,之前设置的10个内存没有使用。
并且我SetSize(100000)设置这么大的时候,然后加入100000个Ptr,发现不设置大小,效率反而更高。
一个是SetSize,结果加入数据用了800ms
一个是没有使用SetSize,结果加入数据用了200ms
不明白为什么,如何去使用呢,请高手指教
[解决办法]
用getdata得到地址的指针
然后new来赋值
不是用add
CObArray myArray;// Allocate memory for at least 32 elements.myArray.SetSize(32, 128);// Add elements to the array.CAge** ppAge = (CAge**) myArray.GetData();for (int i = 0; i < 32; i++, ppAge++) *ppAge = new CAge(i);
[解决办法]
用vector多好。
[解决办法]
你是说效率问题?MFC的容器类包括CString字符串都烂得很,你用STL吧,快得多,唯一的缺点就是不能序列化,不过没多少人会用到