首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于标准C++中vector的有关问题

2012-03-01 
关于标准C++中vector的问题有如下代码:std::vector int *pVec......pVec-clear()pVec-swap( (std::v

关于标准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没使用内存的释放。

热点排行