【C++学习笔记】标准库容器Vector可变长度实现原理
2016-10-10 18:39
931 查看
vector是C++中标准库容器的一种,vector与C++基本类型数组最大的不同是:数组定长,在初始化时必须定义长度,且不可再添加元素;vector可使用vec.pusu_back()来动态增加元素。
数组和vector都是线性表的顺序存储结构。
数组在定义时就规划了一片固定长度的内存空间,一般不可增加,若要再增加,需要重新申请内存;
那么,vector的动态增加元素是怎么实现的呢?vector其实也是在定义的时候就规划了一篇内存空间,但是内存空间比定义的size要大,也就是说预留了一部分内存空间来用于存储新增的元素。而且还可以自己定义需要预留的空间大小,vec.reserve() 这样就不会对内存空间造成太大的浪费。
总的来说,数组是C++的基本类型,不可增长,空间利用效率高,但是不是很灵活实用,如果溢出的话还可能有存在很大的程序安全问题;vector是标准库定义的类模板,支持的函数非常丰富,而且支持动态添加,但是需要预留一部分空间作为预留空间,存在一定的浪费,但是可以通过自定义预留空间最小化空间浪费。vector比数组要实用很多。
数组和vector都是线性表的顺序存储结构。
数组在定义时就规划了一片固定长度的内存空间,一般不可增加,若要再增加,需要重新申请内存;
那么,vector的动态增加元素是怎么实现的呢?vector其实也是在定义的时候就规划了一篇内存空间,但是内存空间比定义的size要大,也就是说预留了一部分内存空间来用于存储新增的元素。而且还可以自己定义需要预留的空间大小,vec.reserve() 这样就不会对内存空间造成太大的浪费。
总的来说,数组是C++的基本类型,不可增长,空间利用效率高,但是不是很灵活实用,如果溢出的话还可能有存在很大的程序安全问题;vector是标准库定义的类模板,支持的函数非常丰富,而且支持动态添加,但是需要预留一部分空间作为预留空间,存在一定的浪费,但是可以通过自定义预留空间最小化空间浪费。vector比数组要实用很多。
相关文章推荐
- C++ STL学习笔记二 vector向量容器
- C++学习笔记——标准库类型vector(1)
- C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
- C++基础的不能再基础的学习笔记——标准库类型vector(基础)
- C++学习笔记:多态的实现原理
- C++学习笔记--vector容器
- C++ STL--vector向量容器学习笔记
- 【Tomcat】学习笔记:tomcat容器基本实现原理
- C++学习笔记(字符串string、vector_deque、queue,multiset、map、multimap、容器拷贝问题)
- C++学习总结——vector容器的实现
- c++学习笔记之vector容器与list容器
- C++学习之vector容器笔记
- C++学习笔记(字符串string、vector_deque、queue,multiset、map、multimap、容器拷贝问题)(复制粘贴,方便后面翻阅)
- C++中的vector容器对象学习笔记
- C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
- C++学习笔记——STL(二)vector容器
- c++学习笔记(7)——关于类的实现(以vector为例)
- 【C++】vector容器和list容器中使用单个迭代器的erase函数学习笔记
- 学习笔记之 Servlet容器服务器原理 简易实现代码
- C++学习笔记:Vector容器