http://blog.csdn.net/hancunai0017/article/details/7032383
http://www.cppblog.com/totti1006/archive/2009/09/01/94955.html
#include <vector> //vector的引入
vector<type> name; // 定义 type可以是简单数据类型也可以是类对象类型
vector<type> v1; // vector保存类型为type的对象。默认构造函数v1为空。
vector<type> v2(v1); // v2是v1的一个副本。
vector<type> v3(n, i); // v3包含n个值为i的元素。
vector<type> v4(n); //v4含有值初始化的元素的n个副本
1.push_back 在数组的最后添加一个数据 a.push_back(b) 将b添加在a列表的后面
2.pop_back 去掉数组的最后一个数据 //去掉以后数据仍然存在,但是.size已经不显示,并且如果再次pushback写
// 入,会在这个位置上覆盖写入
3.at 得到编号位置的数据
4.begin 得到数组头的指针 // 这个指针是指迭代器而不是指的pointer,迭代器的使用与list的迭代
// 器相似:iterator
// for(auto iterator=a.begin();iterator!=a.end;++)
5.end 得到数组的最后一个单元+1的指针
//在vector里面,也是使用指针+1的方式指向下一个元素,只是这里的指针不是pointer ,而是iterator
在常规array里面,array本身代表了一个地址,而array+i代表了第i个元素
在vector数组里面,地址通过vector.begin的方式获得,vector.begin+i则代表了数组里的第i个元素
获得第i个元素的方法 (1). *(vector.begin+i)
(2). vector.at(i)
----------
6.front 得到数组头的引用 // a.front()就自动等于第一个元素,而且是引用,是可以直接修改的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
----------
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小 a.capa/a.size() 已分配/已使用的大小
//a.size比较实用,可以统计数组中元素的个数,而且是实际使用的个数
----------
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
----------
13.erase 删除指针指向的数据项
//erase仅仅针对迭代器指向的内容才是可以删除并有效的,并且效率相比pop_up更高
----------
14.clear 清空当前的vector
// 清空但是size/capa不变因为内存仍然分配了那么多
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
// 为空则返回1,不为空则返回0
----------
提高vector的使用效率.
1)使用reserve()函数提前设定容量大小,避免多次容量扩充操作导致效率低下。
i)当进行insert或push_back等增加元素的操作时,如果此时动态数组的内存不够用,就要动态的重新分配当前大小的1.5~2倍的新内存区,再把原数组的内容复制过去。所以,在一般情况下,其访问速度同一般数组,只有在重新分配发生时,其性能才会下降。
ii)进行pop_back操作时,capacity并不会因为vector容器里的元素减少而有所下降,还会维持操作之前的大小,只有size,作为真正使用到的大小才会发生改变
iii)对于vector容器来说,如果有大量的数据需要进行push_back,应当使用reserve()函数提前设定其容量大小,否则会出现许多次容量扩充操作,导致效率低下。
2)使用“交换技巧”来修整vector过剩空间/内存 vector<int>(ivec).swap(ivec);
3) 用swap方法强行释放STL Vector所占内存 vector<int> v ; vector<int>().swap(v);
Vector
最新推荐文章于 2024-03-07 21:48:19 发布