本篇将讲述vector类中的各种重要和常用函数(begin()、end()、rbegin()、rend()cbegin()、cend() 、crbegin()、crend()、size()、resize()、capacity()、reserve()、empty()、push_back ()、pop_back()、insert()、erase()、clear()。)
所有函数使用时应当包含头文件<vector>。
如果对您有帮助还请多多点赞,要是文章有错误地方还请你在评论区留言指正。
一、vector的创建
1. 空容器构造函数(默认构造函数)
作用: 构造一个没有元素的空容器。
用法:
vector <int> v;
2.填充构造函数
作用:构造一个包含 n 个元素的容器。每个元素都是 val 的副本。
用法:
vector <int> v(5,0);
3.范围构造函数
作用: 构造一个容器,其中包含与范围 [first,last] 一样多的元素,每个元素都按相同的顺序从该区域中的相应元素构造。
用法:
vector<int> v2(v1.begin(), v1.end());
4.复制构造函数
作用:以相同的顺序构造一个容器,其中包含 x 中每个元素的副本。
用法:
vector<int>v1(4, 0);vector<int> v2(v1);
二、迭代器
1.begin()
作用:返回指向向量中第一个元素的迭代器。
用法:
vector<int>v = {1,2,3,4,5,6};
vector<int>::iterator it = v.begin();
2.end()
作用:返回一个迭代器,该迭代器引用向量容器中的 past-the-end 元素。
用法:
vector<int>v = {1,2,3,4,5,6};
vector<int>::iterator it = v.begin();
while (it != v.end())
{cout << *it << ' ';it++;
}
3.rbegin()和rend()
作用:与上述begin()和end()反过来
rbegin():返回一个反向迭代器,该迭代器指向向量中的最后一个元素(即其反向开头)。
rend():返回一个反向迭代器,该迭代器指向向量中第一个元素之前的理论元素(被视为其反向端)。
用法:
vector<int>v = {1,2,3,4,5,6};
vector<int>::reverse_iterator it = v.rbegin();
while (it != v.rend())
{cout << *it << ' ';it++;
}
4.cbegin()、cend() 、crbegin()、crend()
作用:功能上与上述4个函数类似,只是不能改变其指向。
三、容量
1.size()
作用:返回向量中的元素数。
用法:
size_t i = v.size();
2.resize()
作用: 调整容器的大小,使其包含 n 个元素。如果 n 小于当前容器大小,则内容将减少到其前 n 个元素,删除超出此部分的元素(并销毁它们)。如果 n 大于当前容器大小,则通过在末尾插入所需数量的元素来扩展内容,以达到 n 的大小。如果指定了 val ,则新元素将初始化为 val 的副本,否则,它们将进行值初始化。
用法:
vector<int>v1 = { 1,2,3,4,5,6 };vector<int>v2 = { 1,2,3,4,5,6 };vector<int>v3 = { 1,2,3,4,5,6 };v1.resize(4);v2.resize(10);v3.resize(10,3);
3.capacity()
作用: 返回当前为vector分配的存储空间的大小,以元素表示。此容量不一定等于向量的大小。它可以相等或更大,额外的空间允许容纳生长,而无需在每次插入时重新分配。请注意,此容量不假设对向量的大小有限制。当此容量耗尽并需要更多容量时,容器会自动扩展它(重新分配其存储空间)。
用法:
size_t i = v.capacity();
4.reserve()
作用:
请求向量容量至少足以包含 n 个元素。
如果 n 大于当前向量容量,则该函数会导致容器重新分配其存储,将其容量增加到 n(或更大)。
在所有其他情况下,函数调用不会导致重新分配,并且向量容量不受影响。
此函数对容量大小没有影响,也无法更改其元素。
用法:
v.reserve(10);
5.empty()
作用:返回向量是否为空(即其大小是否为 0)。此函数不会以任何方式修改容器。 如果容器大小为 0,则为 true,否则为 false。
用法:
vector<int>v;cout << v.empty() << endl;
四、修饰符
1.push_back ()
作用:在向量尾部插入一个元素val。
用法:
vector<int>v = { 1,2,3,4,5,6 };v.push_back(0);
2.pop_back()
作用: 删除向量中的最后一个元素,从而有效地将容器大小减小 1。这将销毁已删除的元素。
用法:
vector<int>v = { 1,2,3,4,5,6 };v.pop_back();
3.insert()
作用:通过在指定位置的元素之前插入新元素来扩展向量,从而有效地增加容器大小(增加插入的元素数)。当且仅当新向量大小超过当前向量容量时,这会导致自动重新分配分配的存储空间。
用法:
vector<int>v = { 1,2,3,4,5,6 };std::vector<int>::iterator it = v.begin() + 2;v.insert(it, 0);
4erase()
作用:从向量中删除单个元素 (位置) 或一系列元素 ([first,last))。这实际上通过删除的元素数(被销毁)来减小容器大小。
用法:
vector<int>v = { 1,2,3,4,5,6 };std::vector<int>::iterator it = v.begin() + 2;v.erase(it, v.end());
5.clear()
作用:从向量中删除所有元素(已销毁),使容器的大小为 0。
用法:
v.clear();