vector 是为了实现动态数组而产生的容器,其本质是类模板,可以存储任何类型的数据。

vector 是一种顺序容器,在内存中连续排列。

vector 对象的大小

vector 对象大小是固定的。

int main()
{
    // 24
    std::vector<int> v1;
    std::vector<double> v2;

    // 24
    std::cout << sizeof(v1) << std::endl;
    // 24
    std::cout << sizeof(v2) << std::endl;
    return 0;
}

vector 的初始化

vector<int> v1;                                  // 无元素
vector<int> v2 {1, 2, 3, 4, 5};                  // 列表初始化
vector<int> v3(4);                               // 4个元素,初始值为0
vector<int> v4(5, 3);                            // 5个元素,初始值为3
vector<int> v5(v4);                              // 使用另外一个vector初始化,拷贝其所有元素
vector<int> v6(arr1, arr1+5);                    // 使用指针初始化
vector<int> v6(v4.begin(), v4.end());            // 使用迭代器初始化(左闭,右开)

vector 成员函数

容量

函数名 功能
size 返回实际元素的个数
capacity 返回总共可以容纳的元素个数
max_size 返回元素个数的最大值。这个值非常大,一般是 2^32-1
empty 判断 vector 是否为空,为空返回 true 否则 false
resize 改变 size,如果 resize 后比实际 size 小,则会截断;若比实际size大,则可以设置填充的字符
reserve 增加容器的容量,控制 vector 的预留空间,如果 reserve 的容量比实际 capacity 小,则不做任何处理
shrink_to_fit 减少 capacity 到 size 的大小,即减小到 size 的大小

说明:

容器操作

函数名 功能
operator[] vector 可以和数组一样用[]访问元素
at vector.at(i)等同于 vector[i],访问数组下表的元素
front 返回第一个元素
back 返回最后一个元素
data 返回指向容器中第一个元素的指针
push_back 在容器的尾部插入元素
pop_back 删除最后一个元素
insert 在指定位置之前插入元素
erase 删除元素
clear 清除容器内容,size=0,存储空间不变
swap 交换两个元素的所有内容
assign 用新元素替换原有内容。
emplace 在指定位置之前插入元素
emplace_back 在容器的尾部插入元素

insert/push_back 和 emplace/emplace_back 的区别:

  • 调用 push 或者 insert 时,将元素类型的对象传递出去,这些对象被拷贝到容器当中,或者创建一个局部临时对象,并将其压入容器。
  • 调用 emplace/emplace_back 时,则是将参数传递给元素类型的构造函数,emplace 成员使用这些参数在容器管理的内存空间中直接构造元素,没有拷贝的操作。

迭代器

函数名 功能
begin 返回指向容器中第一个元素的迭代器。
end 返回指向容器最后一个元素所在位置后一个位置的迭代器
rbegin 返回容器逆序的第一个元素的迭代器
rend 返回容器逆序的最后一个元素的前一个位置的迭代器
cbegin 和 begin()功能相同,在其基础上增加了 const 属性,不能用于修改元素。
cend 和 end()功能相同,在其基础上增加了 const 属性,不能用于修改元素。
crbegin 和 rbegin()功能相同,在其基础上增加了 const 属性,不能用于修改元素。
crend 和 rend()功能相同,在其基础上增加了 const 属性,不能用于修改元素。