vector的clear

  

要求你熟悉stl,言下之意就是要你熟悉stl的内部实现。

vector的clear动作并不回收内存,有点像内存泄露但又不是内存泄露,因为下次装入元素不用分配内存,直接使用这些预分配内存,

clear并不改变vector的capacity。vector内的元素如果是对象型会在clear时调用对应的析构,如果是指针型,vector并不负责释放

内存,这个会引起真正的内存泄露。

如果你想回收vector的内存,那么可以用swap技法,比如vector<type> tmp.swap(v) 。这将生成一个空的vector,然后与现有的

vector交换。

时间: 2024-10-18 05:25:02

vector的clear的相关文章

vector的clear方法注意事项

void clear():删除存储在vector中的所有元素 一. 1.如果vector的元素是一些object,则它将为当前存储的每个元素调用它们各自的析构函数. 2.如果vector存储的是指向对象的指针,此函数并不会调用到对应的析构函数.会造成内存泄漏.想要删除vector中的元素则应遍历vector使用delete,然后再clear for(int i = 0; i < vec.size(); ++i) { delete vec[i]; } vec.clear(); 调用clear后,v

vector的clear()和swap()比较

假设有若干对象存于一个 vector 中: class Widget; vector<Widget> vw; 后来由于某些原因,从该容器中删除了若干对象(参考erase-remove idiom ).对于 vector 和 string 来讲, erase() 和 clear() 并不会改变容器的capacity,也就不会改变他们的内存占用. swap() 本意是用来交换两个容器的内容( Iterators, pointers, and references),但我们可以用他来快速将容器的 c

vector 中的clear()

为什么clear之后,还是输出fdsafdsa.有什么办法可以真正清空之? 因为对于vector,clear并不真正释放内存(这是为优化效率所做的事),clear实际所做的是为vector中所保存的所有对象调用析构函数(如果有的话),然后初始化size这些东西,让你觉得把所有的对象清除了... 真正释放内存是在vector的析构函数里进行的,所以一旦超出vector的作用域(如函数返回),首先它所保存的所有对象会被析构,然后会调用allocator中的deallocate函数回收对象本身的内存.

Java集合框架源码(四)——Vector

第1部分 Vector介绍 Vector简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口.Vector 继承了AbstractList,实现了List:所以,它是一个队列,支持相关的添加.删除.修改.遍历等功能.Vector 实现了RandmoAccess接口,即提供了随机访问功能.RandmoAccess是java中用来被List实现,为List提供快速访问功能的.在Vecto

C++实现vector

用了双向链表,快排,<<,=,[]重载,还有erase的实现比较好玩 1 //my Vecter ;T need "operator<" 2 3 #include <iostream> 4 using std::cout; 5 using std::ostream; 6 7 template <typename T> 8 struct item 9 { 10 item():value(),next(NULL),last(NULL){} 11 i

线性表Vector

线性表 Vector #ifndef SJTU_VECTOR_HPP #define SJTU_VECTOR_HPP #include <cstddef> #include <cstring> #include <string> #include <cstdlib> #include <vector> #include <climits> #include <cstddef> namespace sjtu { class

Java 集合系列06之 Vector详细介绍(源码解析)和使用示例

概要 学完ArrayList和LinkedList之后,我们接着学习Vector.学习方式还是和之前一样,先对Vector有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它.第1部分 Vector介绍第2部分 Vector数据结构第3部分 Vector源码解析(基于JDK1.6.0_45)第4部分 Vector遍历方式第5部分 Vector示例 转载:http://www.cnblogs.com/skywang12345/p/3308833.html 第1部分 Vector介绍 Vec

(转)Java 集合系列06之 Vector详细介绍(源码解析)和使用示例

概要 学完ArrayList和LinkedList之后,我们接着学习Vector.学习方式还是和之前一样,先对Vector有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它.第1部分 Vector介绍第2部分 Vector数据结构第3部分 Vector源码解析(基于JDK1.6.0_45)第4部分 Vector遍历方式第5部分 Vector示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308833.html 第1部分 Vector介

string和stringbuffer的区别 集合的作用 ArrayList vector linklist hashmap hashtable collection和collections

string给定的长度 不可变,当多个字符串联合的时候先转化为stringbuffer然后联合,速度慢,stringbuffer可以改变字符串的长度,当多个字符串连接的时候采用stringbuffer效率比较高. 集合的作用 对数据进行传送,对数据进行增删改查,还可以用来存放不同的对象. import java.util.Vector;import java.util.List;import java.util.Iterator;import java.util.Enumeration; /**