Vector 的清空

时间:2022-03-10 07:07:18

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

 vector <int> vecInt;
for (int i=; i<; i++)
{
vecInt.push_back(i);
}
int j= vecInt.capacity(); //j=512
int i = vecInt.size(); //i=500

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

 vecInt.clear();
int j= vecInt.capacity(); //j=512
int i = vecInt.size(); //i=0

第二种办法使用 erase循环删除,结果同上

 vector <int>::iterator iter=vecInt.begin();
for ( ;iter!=vecInt.end();)
{
iter=vecInt.erase(iter);
}
int j= vecInt.capacity(); //j=512
int i = vecInt.size(); //i=0

erase在每次操作时,迭代器指针会整体前移1,就是每次都会“搬”全部数据,所以vector不适合做频繁删除的容器

第三种办法 最简单的使用swap,清除元素并回收内存

  vector <int>().swap(vecInt);  //清除容器并最小化它的容量,
// vecInt.swap(vector<int>()) ; 另一种写法
j= vecInt.capacity(); //j=0
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.

Vector 的清空的更多相关文章

  1. C&plus;&plus;的vector容器清空

    c++内部STL库中自带了一个容器vetcor, 自带了清空方法——clear().但是clear使用之后,并不能清空数据,其数据再未被覆盖之前是不会改变的,个人猜测clear仅仅把指针挪动到了起始位 ...

  2. 用vector实现dijkstra

    #include <stdio.h> #include <string.h> #include <string> #include <vector> # ...

  3. vector使用注意事项

    1. 需要保存若干同类数据项时,用vector比较方便.不用管理下标,直接push_back即可. 2. 当程序重复执行一段代码时,之前保存数据用的vector需要清空.因为不是按照下标保存的数据,不 ...

  4. C&plus;&plus;标准库类模板vector

    vector是C++标准库STL中的一个重要的类模板,相当于一个更加健壮的,有很多附加能力的数组 使用vector前首先要包含头文件 #include<vector>  1.vector的 ...

  5. vector的简单用法

    vector是C++中容器的一种,与普通的数组相比,它可以动态的增长,而且还有封装了用于顺序表的操作的方法. 使用vector定义了容器之后,如果定义了容器的大小,则可以在大小范围之内直接使用数组的方 ...

  6. C&plus;&plus;-STL:vector用法总结

    目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...

  7. C&plus;&plus;之vector模板类

    vector 称为容器模板类,是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型.vector 类型的每一种都指定 ...

  8. C&plus;&plus;编程小知识随手记

    C++编程小知识点: (1)queue和vector类型: 加入元素 : queue是queue.push(),vector是vector.push_back(), 删除元素: queue是queue ...

  9. 快速求n的质因子&lpar;数论&rpar;

    快速求n的质因子 如何尽快地求出n的质因子呢?我们这里又涉及两个好的算法了! 第一个:用于每次只能求出一个数的质因子,适用于题目中给的n的个数不是很多,但是n又特别大的 #include<std ...

随机推荐

  1. The difference between macro and function I&sol;Ofunction comparision&lpar;from c and pointer &rpar;

    macro is typeless and execute faster than funtion ,becaus of the overhead of calling and returnning ...

  2. BZOJ3314&colon; &lbrack;Usaco2013 Nov&rsqb;Crowded Cows

    3314: [Usaco2013 Nov]Crowded Cows Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 86  Solved: 61[Subm ...

  3. Java中快速排序的实现

    快速排序是对冒泡排序的一种改进.它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要 小,然后再按次方法对这两部分数据分别进行快速排序,整个排 ...

  4. git提交失败

    git push "提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支."的解决办法 本地已存在项目,需要先获取远端更新并与本地合并,再git push具体操作如下: ...

  5. NodeJs的简单介绍

    Nodejs是由谷歌v8运行.c++编写的js运行的环境,这里需要记住的是Nodejs只是一个环境.  目前很多主流网站都是使用nodejs,如知乎等大型的网站. 我们关于nodejs学习目标:安装N ...

  6. 关于querySelector 和 document&period;getElementsByTagName 选中集合问题

    本文解决的问题是 :运用for..of..循环时,edge浏览器报Object doesn't support property or method 'symbol.iterator'问题 以及 符号 ...

  7. 深入理解计算机系统(4&period;2)------逻辑设计和硬件控制语言HCL

    上一篇博客我们简单介绍了Y86指令集体系,而这篇博客我们将介绍指令集体系的逻辑设计和硬件控制语言HCL,为后面去实现Y86打下基础. 在硬件设计中,用电子电路来计算对位进行运算的函数,以及在各种存储器 ...

  8. python基础之 装饰器&comma;内置函数

    1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使用外部变量(非全局变量)叫做闭包! def wrapper(): money =10 def inner(num) ...

  9. php学习----面向对象

    面向对象 项目代码都应该由单个能起子程序作用的对象组成 重用性.灵活性.扩展性 变量 $this 代表自身的对象. PHP_EOL 为换行符. PHP 中创建对象 类创建后,我们可以使用 new 运算 ...

  10. python入门(八):文件操作

    1.数据的保存: 1) 内存:常用的变量都是在内存里面的 缺点:关机或进程死掉数据丢失 解决方法:将数据保存至文件中 2 )文件:文本内容.二进制的文件内容 3 )数据库:保存    2.读文件: 1 ...