使用STL vector的几种清空容器(删除)办法

时间:2022-05-03 16:05:11
  1. 转载自:http://blog.csdn.net/metalkittie/article/details/3115750
  2. vector <int> vecInt;
  3.     for (int i=0;i<500;i++)
  4.     {
  5.         vecInt.push_back(i);
  6.     }
  7.     int j= vecInt.capacity();   //j=512
  8.     i = vecInt.size();          //i=500            

第一种办法使用 clear ,清空元素,但不回收空间
  1.     vecInt.clear();
  2.     j= vecInt.capacity();      //j=512
  3.     i = vecInt.size();         //i=0

第二种办法使用 erase循环删除,结果同上
  1. vector <int>::iterator iter=vecInt.begin();
  2.     for ( ;iter!=vecInt.end();)
  3.     {
  4.         iter=vecInt.erase(iter);
  5.     }
  6.     j= vecInt.capacity();      //j=512
  7.     i = vecInt.size();         //i=0        
erase在每次操作时,迭代器指针会整体前移1,就是每次都会“搬”全部数据,所以vector不适合做频繁删除的容器

第三种办法 最简单的使用swap,清除元素并回收内存
  1.     vector <int>().swap(vecInt);  //清除容器并最小化它的容量,
  2. //   vecInt.swap(vector<int>()) ;     另一种写法
  3.     j= vecInt.capacity();       //j=0  
  4.     i = vecInt.size();          //i=0        
该语句是由 vector < int >(vecInt).swap(vecInt)的变体而来,一下解释引自csdn: