C++容器 之 vector
来源:互联网 发布:淘宝外卖系统繁忙35 编辑:程序博客网 时间:2024/06/08 17:22
C++容器之 vector
1.理论
向量 vector :
是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。
在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即capacity ()函数的返回值。当存储的数据超过分配的空间时vector 会重新分配一块内存块,但这样的分配是很耗时的,在重新分配空间时它会做这样的动作:
首先,vector 会申请一块更大的内存块;
然后,将原来的数据拷贝到新的内存块中;
其次,销毁掉原内存块中的对象(调用对象的析构函数);
最后,将原来的内存空间释放掉。
如果vector 保存的数据量很大时,这样的操作一定会导致糟糕的性能(这也是vector 被设计成比较容易拷贝的值类型的原因)。所以说vector 不是在什么情况下性能都好,只有在预先知道它大小的情况下vector 的性能才是最优的。
vector 的特点:
(1) 指定一块如同数组一样的连续存储,但空间可以动态扩展。即它可以像数组一样操作,并且可以进行动态操作。通常体现在push_back() ,pop_back() 。
(2) 随机访问方便,它像数组一样被访问,即支持[ ] 操作符和vector.at()
(3) 节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是要明确一点vector 大多情况下并不是满存的,在未存储的区域实际是浪费的。
(4) 在内部进行插入、删除操作效率非常低,这样的操作基本上是被禁止的。Vector 被设计成只能在后端进行追加和删除操作,其原因是vector 内部的实现是按照顺序表的原理。
(5) 只能在vector 的最后进行push 和pop ,不能在vector 的头进行push 和pop 。
(6) 当动态添加的数据超过vector 默认分配的大小时要进行内存的重新分配、拷贝与释放,这个操作非常消耗性能。 所以要vector 达到最优的性能,最好在创建vector 时就指定其空间大小。
2. c++ STL中vector的用法
2.1 引用头文件
#include<vector>#include<algorithm>usingnamespace std; vector<int>vec; //定义一个int型的动态数组vector<string>str; //定义一个string型的动态数组
2.2 三种遍历数组的方法
方法1:
for(int i = 0; i < vec.size(); i++) //遍历整个数组 :cout<<vec[i]<<endl;
方法2:
vector<int>::iterator it= vec.begin(); //iterator迭代器可以简单理解为类似指向元素位置的指针.这里表明是起始位置for(it = vec.begin(); it !=vec.end(); it++) //遍历整个数组 :cout<< *it <<endl;vec.insert( it + 2,3); // 在第三个元素前面插入3,也就是要在4前面插入3.
方法3:
for_each(vec.begin(),vec.end(), Show); //遍历整个数组,方法3//函数Show一定义如下//void Show(const int num){cout<<num<<endl;}
2.3 vector定义二维数组,其中数组中每个元素为一个容器
1)先定义数组中每个元素的容器,假设此容器格式为string
typedf vector<string> strVector;
2)再定义二维数组
vector<vector< strVector >> arrayA; // arrayA即为此二维数组strVector strVec;for (int i = 0 ; i< width; i ++){ for (int j = 0; j < height; j ++) { arrayA[i][j] = strVec; }}
- C++STL之vector容器
- C++STL容器技术之Vector
- 初学者学习C++STL之vector容器
- 【C++】顺序容器之vector用法
- C++STL库学习之向量容器vector & string容器
- 【c++】容器vector
- C++-vector(容器)
- 【C++】实现容器Vector
- C++vector(容器)用法
- 容器之vector
- C++容器之 Vector
- STL容器之vector
- STL容器之 vector
- STL之vector容器
- STL容器之vector
- 顺序容器之vector
- STL容器之vector
- STL 之 vector 容器
- Mysql 5.7 Linux安装详细步骤
- fig9.10
- JPA实体关系
- HDU 2066 最短路
- Java finally语句到底是在return之前还是之后执行?
- C++容器 之 vector
- SSIS Parameter用法
- node.js(express)中使用Jcrop进行图片裁切上传
- java.net.SocketTimeoutException
- python中文列表输出
- SpringMVC用@RequestParam接收到的中文参数乱码
- Servlet学习笔记四——创建一个数据库
- Android-右上角menu菜单不显示
- Android OpenGL ES 离屏渲染(offscreen render)