vector核心
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 属性,不能用于修改元素。 |