目录
vector容器简介
vector是C++标准容器里的一个类,使用时包含头文件<vector>,支持随机存取(可以通过下标方式访问)。以vector为模板,可以放置各种类型参数如int,char,也可以放置用户自订的class。在大多数情况下vector比较高效。
注意的是,vector实现动态增长的原理是,如果插入新元素时空间不足,则会申请更大的一块内存空间,并且将原有空间的数据转移过去并且删除原有空间。
vector容器操作
下列的v均表示以vector申明的一个向量。
初始化
vector<T> v;
vector(v.begin(), v.end()); 将v在begin到end区间内的元素拷贝给本身
vector(n, elem); 构造n个elem给本身
vector(const vector &vec); 拷贝构造函数
示例:
vector<int> v1;
int arr[] = { 10, 20, 30, 40 };
vector<int> v2(arr, arr + sizeof(arr) / sizeof(int));
vector<int> v3(v2.begin(), v2.end());
vector<int> v4(v3);
赋值
v.assign(beg, end); 将beg,end区间内的数据拷贝给本身
v.assign(n, elem); 将n个elem元素拷贝给本身
vector& operator=(const vector &vec); 重载等号操作符,及可以直接用=赋值
v.swap(vec); 将另一个vec向量的值与本身互换
示例;
int arr[] = { 10, 20, 30, 40 };
vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));
//成员方法
vector<int> v2;
v2.assign(v1.begin(), v1.end());
//重载=
vector<int> v3;
v3 = v2;
大小操作
v.size(): 返回容器中元素个数
v.empty(): 判断容器是否为空
v.resize(int num): 变长用默认值填充,变短删除后面的元素
v.capacity(): 容器的容量,注意容量和元素个数不相等
v.reserve(int len): 容器预留len个元素长度,预留位置不初始化不可访问
可以加默认值如reserve(6, 1);
数据存取操作
v.at(int idx); 返回索引idx的数据,如果越界抛出异常
operator[]; 返回索引idx的数据,(直接访问idx位元素)越界报错
v.front(); 返回容器中的第一个数据元素
v.back(); 返回容器中最后一个数据元素
插入删除操作
insert(const_iterator pos, int count, elem); 迭代器指向位置pos插入count个元素elem
v.push_back(elem); 尾部插入元素elem
v.pop_back(); 删除最后一个元素
v.erase(const_iterator start, cont_iterator end); 删除迭代器从start到end之间的元素
v.erase(const_iterator pos); 删除迭代器指向的元素
v.clear(); 删除容器中所有元素
vector<int> v;
v.push_back(10);
v.push_back(20);
//头插
v.insert(v.begin(), 30);
//尾插
v.insert(v.end(), 40);
//中间插
v.insert(v.begin() + 2, 100);
使用技巧
1、vector虽然有insert类函数支持在中间插入,但是其本质和数组类似,因为是顺序存储,在中间插入元素会依次移动后面的函数,会造成时间的浪费,所以可以在尾部操作尽量在尾部操作。
2、有时候生成的vector所使用的空间超过我们需要的,可以用vector<int>(v).swap(v);这样与自己交换来缩小空间。注意vector增加元素会自动增长,但是删除元素不会自动减少空间。
3、如果大概知道容器的个数,可以使用reserve来预存空间,不然会申请多次空间。