C++ vector 容器学习笔记

本文整理自 http://www.cplusplus.com/reference/vector/vector/

Vector 是 C++ 中十分重要的一个容器类型。
官方文档给出的定义是:
Vectors are sequence containers representing arrays that can change in size.
即可以改变大小的数组的序列容器。

要使用 vector 类,必须先包含头文件 vector:

#include 

接下来我们来熟悉 Vector 类的成员函数:

  1. 构造函数

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()  // 析构函数
  1. vector::operator=
vector& operator= (const vector& x);  // 将 x 的所有元素复制到新容器中,x 元素保留
vector& operator= (vector&& x);  // 将 x 的所有元素移动到新容器中, x 处于未指定但有效的状态

std::vector foo (3,0);
std::vector bar (5,0);

bar = foo;
foo = std::vector();

关于未指定但有效的状态:
当对象处于未指定状态时,我们可以对没有先决条件的对象执行任何操作。 如果有一个操作要执行的先决条件,我们不能直接执行该操作,因为我们不知道对象的 unspecified-state 是否满足先决条件。

一般没有前提条件的操作示例:

  • 销毁
  • 赋值
  • 像 get,empty,size 这样的常量观察者

有前提条件的操作示例:

  • 取消引用
  • pop_back
  1. 迭代器类型
std::vector 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

  1. 容量
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
  1. 获取元素
myvector[i];  // 返回 myvector 的第 i 个元素
myvector.at(i);  // 返回对在 i 位置元素的一个引用
myvector.front();  // 返回对 myvector 首元素的引用
myvector.back();  // 返回对 myvector 末元素的引用
myvector.data();  // 返回一个直接访问  vector 内部元素的指针
  1. 修改
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 的知识参见原网址。

你可能感兴趣的:(C++ vector 容器学习笔记)