zoukankan      html  css  js  c++  java
  • Vector 的清空

    前两天比赛有一道题,有用到了vector的清空,用的是swap,我一开始还不太清楚,所以去查了下资料,转载一篇关于vector的清空的。

    1 vector <int> vecInt;
    2 for (int i=0; i<500; i++)
    3 {
    4     vecInt.push_back(i);
    5 }
    6 int j= vecInt.capacity();   //j=512
    7 int i = vecInt.size();          //i=500

    第一种办法使用 clear ,清空元素,但不回收空间

    1 vecInt.clear();
    2 int j= vecInt.capacity();      //j=512
    3 int 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 int j= vecInt.capacity();      //j=512
    7 int 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:

    std::vector<T>(v).swap(v);的作用相当于:    
      {   
      std::vector<T>   temp(v);//1   
      temp.swap(v);//2   
      }   
      第一句产生一个和v内容一模一样的vector,只不过temp的容量是恰好满足其大小的   
      第二句把v和temp交换   
      然后temp就自动解析掉了   
        
      这样写的作用是:把v的容量缩小到最佳值

    该例中执行这句时,capacity收缩到500

    ××××××××××××××××××××××
    不过以上还是调用stl的函数看到的,不知其内部是如何做的。在网上看到其他人的讨论有这样:
    @@而Cygwin中的GCC用的应该是HP STL或从它继承来的SGI STL,对于小内存有一种缓冲池机制,一旦进池的内存就再也不会交还给系统了
    @@swap 不起作用, 因为原因是 allocator.

  • 相关阅读:
    HearthBuddy投降插件2019-11-01的使用
    正则表达式在线分析 regex online analyzer
    Tips to write better Conditionals in JavaScript
    The fileSyncDll.ps1 is not digitally signed. You cannot run this script on the current system.
    Cannot capture jmeter traffic in fiddler
    JMETER + POST + anti-forgery token
    input type color
    HearthBuddy修改系统时间
    What are all the possible values for HTTP “Content-Type” header?
    UDK性能优化
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3638286.html
Copyright © 2011-2022 走看看