关于标准C++中vector的问题
有如下代码:
std::vector <int> *pVec;
...
...
pVec->clear();
pVec->swap( (std::vector <int>)(*pVec) );
请问:调用pVec->clear()以后,为什么还要swap()一下 ?
[解决办法]
把*pvec中没有用到的内存释放掉
[解决办法]
vector<int> vNew(v);(v是一个vector<int>)
按上面的语法,创建一个vector,是按照v的实际元素个数创建新vector的。就是说,如果v中元素是1,2,3,那么,vNew中的元素是1,2,3,并且,vNew的总容量也是3.
也就是:vNew的总容量取决于v的实际元素个数。
pVec->clear();
clear()只是删除[first,last)区间中的所有元素,但并不释放其内存。
(std::vector <int >)(*pVec)
也就是创建一个临时对象vector<int>,显然,这个临时对象的总容量是取决于*pVec的实际元素个数的,而经过
pVec->clear();的pVect的实际元素个数是0,因此,pVec- >swap( (std::vector <int >)(*pVec) ); 将这个临时对象与pVec交换后,它的总容量变成了0。
(vector中的swap()实现的是:将first、last,end_of_storage(总容量)依次交换)。
因此,实现了*pVec没使用内存的释放。