本文整理自 http://www.cplusplus.com/reference/vector/vector/
Vector 是 C++ 中十分重要的一个容器类型。
官方文档给出的定义是:
Vectors are sequence containers representing arrays that can change in size.
即可以改变大小的数组的序列容器。
要使用 vector 类,必须先包含头文件 vector:
#include <vector>
接下来我们来熟悉 Vector 类的成员函数:
- 构造函数
vector(); // 创建一个空的 vector
vector(int nSize); // 创建一个元素个数为 nSize 的 vector
vector(int nSIze, const value_type& value); // 创建一个元素个数为 nSize 的 vector,值均为 value
vector(InputIterator first, InputIterator last); // 将另一个迭代器类型的[first, last) 复制到 vector 中
vector(const vector& x); // 复制构造函数,复制已经存在的 vector
~vector() // 析构函数
- vector::operator=
vector& operator= (const vector& x); // 将 x 的所有元素复制到新容器中,x 元素保留
vector& operator= (vector&& x); // 将 x 的所有元素移动到新容器中, x 处于未指定但有效的状态
std::vector<int> foo (3,0);
std::vector<int> bar (5,0);
bar = foo;
foo = std::vector<int>();
关于未指定但有效的状态:
当对象处于未指定状态时,我们可以对没有先决条件的对象执行任何操作。 如果有一个操作要执行的先决条件,我们不能直接执行该操作,因为我们不知道对象的 unspecified-state 是否满足先决条件。
一般没有前提条件的操作示例:
- 销毁
- 赋值
- 像 get,empty,size 这样的常量观察者
有前提条件的操作示例:
- 取消引用
- pop_back
- 迭代器类型
std::vector<int> myvector; // 定义一个 空的 vector
for (int i=1; i<=100; i++) myvector.push_back(i); // 为 vector 添加元素
myvector.begin(); // 返回一个迭代器,它指向容器 vector 的第一个元素
myvector.end(); // 返回一个迭代器,它指向容器 vector 的最后一个元素的下一个位置
myvector.rbegin(); // 返回一个逆序迭代器,它指向容器 vector 的最后一个元素
myvector.rend(); // 返回一个逆序迭代器,它指向容器 vector 的第一个元素前面的位置
// 以下四个是上面四个的常量版本
myvector.cbegin();
myvector.cend();
myvector.crbegin();
myvector.crend();
关于反向迭代器的内容,见 https://blog.csdn.net/kjing/article/details/6936325
- 容量
myvector.size(); // 返回当前容器的容量大小 100
myvector.max_szie(); // 返回当前容器最大可承载的元素数量 1073741823
myvector.capacity(); // 返回容器分配的容量的大小 128
// 改变容器大小,使之为 n
myvector.resize(size type n); // 如果 n 比原来小,则保留前 n 位,删除后面的元素
myvector.resize((size_type n, const value_type& val); // 如果 n 比原来大,若提供 val,则填充;否则值初始化
// 若 n 比原来的 capacity 还大,则重新分配
myvector.empty(); // 返回容器 size 是否为空
myvector.reserve(size_type n); // 如果 n 比原来的 capacity 大,则 capacity 增大为 n,否则无变化
myvector.shrink_to_fit(); // 将容器的capacity 减小至与它的 size 相匹配,不会更改 size 和 value
- 获取元素
myvector[i]; // 返回 myvector 的第 i 个元素
myvector.at(i); // 返回对在 i 位置元素的一个引用
myvector.front(); // 返回对 myvector 首元素的引用
myvector.back(); // 返回对 myvector 末元素的引用
myvector.data(); // 返回一个直接访问 vector 内部元素的指针
- 修改
myvector.assign(InputIterator first, InputIterator last); // 新 myvector 的值是可迭代对象的 [first, last)
myvector.assign(size_type n, const value_type& val); // 新 myvector 有 n 个元素,均为 val
myvector.push_back(value_type&& val); // 在 myvector 最后添加一个新元素,同时 size + 1
myvector.pop_back(value_type&& val); // 在 myvector 删除最后一个元素,同时 size - 1
myvector.insert(const_iterator position, const value_type& val); // 在 position 位置插入新值 val
myvector.insert(const_iterator position, size_type n, const value_type& val); // 在 position 位置插入 n 个新值 val
myvector.insert(const_iterator position, InputIterator first, InputIterator last); // 在 position 位置插入另一个迭代对象[first:last)
myvector,erase(const_iterator position); // 删除 position 位置的元素
myvector.erase(const_iterator first, const_iterator last); // 删除 [first,last) 范围的元素
myvector.swap(vector& x); // 交换,所有东西全部交换
myvector.clear(); // 清除 myvector 里的所有元素,只留一个空 vector
有关 allocator 的知识参见原网址。