STL之vector详解
2015-06-21 22:55
246 查看
一、vector容器的自增长
首先,我们知道vector容器是由数组做出来的;它具备了数组的优缺点.
数组的优点:
操作数据,读取速度很快,因为有下标;
数组的缺点:
分配之后不能在改变大小;
运行结果如下:
结果分析:
1、vector增长的过程是一个按照2的指数级增长的;
2、第11行到第12行过程中,存在一个从旧数组拷贝数据到新数组的过程;
vector的reserve()函数:
ivec.reserve(100); //将capacity增加到100;
运行结果如下:
总结:各种编译工具实现vector增长方式不一致;例如:vs中,在capacity为100时候,size也为100,加入一个数据,capacity增加为150;
而g++中直接增加到200;
首先,我们知道vector容器是由数组做出来的;它具备了数组的优缺点.
数组的优点:
操作数据,读取速度很快,因为有下标;
数组的缺点:
分配之后不能在改变大小;
#include <iostream> #include <vector> using namespace std; int main() { int bb[3]; bb[0] = 1; bb[1] = 2; bb[2] = 3; //要将bb拷贝到bbb中, //1、将bb中的数据拷贝到bbb中, int bbb[10]; bbb[0] = 1; std::vector<int> ivec; std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(10); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(10); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(30); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(40); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(50); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(60); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(70); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(80); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(90); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(90); std::cout <<"实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; return 0; }
运行结果如下:
[root@linux cp]# g++ vector_demo.cpp -g -Wall [root@linux cp]# ./a.out 实际使用大小:0,容器的容量0 //0 实际使用大小:1,容器的容量1 //2^0 实际使用大小:2,容器的容量2 //2^1 实际使用大小:3,容器的容量4 //2^2 实际使用大小:4,容器的容量4 //2^2 实际使用大小:5,容器的容量8 //2^3 实际使用大小:6,容器的容量8 //2^3 实际使用大小:7,容器的容量8 实际使用大小:8,容器的容量8 实际使用大小:9,容器的容量16 实际使用大小:10,容器的容量16
结果分析:
1、vector增长的过程是一个按照2的指数级增长的;
2、第11行到第12行过程中,存在一个从旧数组拷贝数据到新数组的过程;
vector的reserve()函数:
ivec.reserve(100); //将capacity增加到100;
//在前段代码基础上,加入以下代码: ivec.reserve(100); std::cout <<"reserve 之后实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; while(ivec.size() != ivec.capacity()) ivec.push_back(99); std::cout <<"reserve 之后实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; ivec.push_back(99); std::cout <<"reserve 之后实际使用大小:" << ivec.size() << ","<<"容器的容量"<< ivec.capacity() << std::endl; return 0; }
运行结果如下:
[root@linux cp]# ./a.out 实际使用大小:0,容器的容量0 实际使用大小:1,容器的容量1 实际使用大小:2,容器的容量2 实际使用大小:3,容器的容量4 实际使用大小:4,容器的容量4 实际使用大小:5,容器的容量8 实际使用大小:6,容器的容量8 实际使用大小:7,容器的容量8 实际使用大小:8,容器的容量8 实际使用大小:9,容器的容量16 实际使用大小:10,容器的容量16 reserve 之后实际使用大小:10,容器的容量100 reserve 之后实际使用大小:100,容器的容量100 reserve 之后实际使用大小:101,容器的容量200
总结:各种编译工具实现vector增长方式不一致;例如:vs中,在capacity为100时候,size也为100,加入一个数据,capacity增加为150;
而g++中直接增加到200;
相关文章推荐
- 4.17
- Android学习之IO流
- 读后感
- Python核心编程笔记---- input 与raw_input
- 【CodeVS】1295 N皇后
- Sunglasses
- LoaderManager使用详解(一)---没有Loader之前的世界
- HDU 3472 HS BDC(混合欧拉图(使用最大流))模板
- 个人作业-《人,绩效和职业道德》读后感
- 突然想把一生都奉献给MySQL
- 几款开源的图形化Redis客户端管理软件
- hdu 1163
- Memcached笔记——(三)Memcached使用总结
- java压缩和解压缩Zip、Jar、Gzip文件
- 【硬盘数据恢复】diskgenius怎么用数据恢复教程
- css盒模型
- 程序测试与调试
- linux系统调用和库函数调用的区别
- X5内核的问题
- Qt5.0加载GDAL库文件