vector概述
vector是种容器,类似数组一样,但它的size可以动态改变。
vector的元素在内存中连续排列,这一点跟数组一样。这意味着我们元素的索引将非常快,而且也可以通过指针的偏移来获取vector中的元素。
但连续排列也带来了弊端,当我们向vector中间插入一个数据时,整个vector的size变大,在内存中就需要重新分配空间,常规的做法是直接申请一个新的array,并将所有元素拷贝过去;但这么做的话,无疑太浪费时间,因此vector采用的做法是:vector会分配额外的空间,以适应size的动态增长。因此,包含同样数量元素的vector和数组相比,占用的空间会更大。而且在vector最后增加或者删除一个元素,消耗的时间是一个常数值,与vector的size无关。
与其他容器(deques、lists、forward_lists)相比,vector在获取元素和对最后一个元素的操作效率上更高;但对于中间元素的操作,性能则相对较差。
vector的使用
头文件
#include
创建vector对象
std::vector<int> vec1; // 空的vector,数据类型为int
std::vector<int> vec2(4); // 4个值为0的vector
std::vector<int> vec3 (4,10); // 4个值为10的vector [10 10 10 10]
std::vector<int> vec4 (vec3.begin(),vec3.end()); // [10 10 10 10]
std::vector<int> vec5 (vec3); // [10 10 10 10]
std::vector<int> vec6 = {
10, 20, 30, 40}; // [10 20 30 40]
属性及操作
Iterators
Name | Description |
---|---|
begin | 返回指向迭代器第一个元素的指针 |
end | 返回指向迭代器最后一个元素的指针 |
rbegin | 返回迭代器逆序第一个元素的指针 |
rend | 返回迭代器逆序最后一个元素的指针 |
cbegin | 返回常量迭代器的第一个元素的指针 |
cend | 返回常量迭代器的最第一个元素的指针 |
crbegin | 返回常量迭代器逆序的第一个元素的指针 |
crend | 返回常量迭代器逆序的最后一个元素的指针 |
Capacity
Name | Description |
---|---|
size | 返回当前vector使用数据量的大小 |
max_size | 返回vector最大可用的数据量 |
resize | 调整vector中的元素个数 |
capacity | 返回vector中总共可以容纳的元素个数 |
empty | 测试vector是否是空的 |
reserve | 控制vector的预留空间 |
shrink_to_fit | 减少capacity到size的大小 |
Element access
Name | Description |
---|---|
operator[] | 在[]中可以做运算 |
at | vector.at(i)相当于vector[i] |
front | 返回第一个元素的值 |
back | 返回最后一个元素的值 |
data | 返回指向vector内存数据的指针 |
Modifiers
Name | Description |
---|---|
assign | 指定vector内容 |
push_back | 在容器的最后一个位置插入元素x |
pop_back | 删除最后一个元素 |