[微信公众号:Cpp入门到精通]有完整六十六节知识,STL知识总结,欢迎关注学习!!
上一节我们讲了Vector容器的两个操作-插入元素和删除元素,这一节我们继续讲关于Vector容器的一些常用操作。
5.修改元素
有多种方式可以修改元素的值,比如说通过下标、迭代器等方式来进行元素的修改。
1.使用下标修改元素:
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
v2[3] = 20;//修改第四个元素的值为20
print(v2);
结果如下:
1 2 3 4 5
1 2 3 20 5
2.使用迭代器修改元素:
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
//修改第三个元素的值为20
vector<int>::iterator it = v2.begin() + 2;
*it = 20;
print(v2);
结果如下:
1 2 3 4 5
1 2 20 4 5
6.访问元素
vector容器中有多种方式来访问元素,以下是一些常用的访问元素的操作:
1. 使用下标访问元素:
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
int data3 = v2[2];
cout << "第三个元素的值为:" <<data3<< endl;
结果如下:
1 2 3 4 5
第三个元素的值为:3
2. 使用at操作符访问元素:
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
int data3 = v2.at(2);
cout << "第三个元素的值为:" <<data3<< endl;
结果如下:
1 2 3 4 5
第三个元素的值为:3
3.第三种方法就是使用迭代器遍历访问,我们之前遍历访问并输出元素中已经学过。
4.使用front()访问首元素,使用back()访问末尾元素:
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
int m1 = v2.front();
cout << "v2的首元素值为:" <<m1<< endl;
int m2 = v2.back();
cout << "v2的末尾元素值为:" << m2 << endl;
结果如下:
1 2 3 4 5
v2的首元素值为:1
v2的末尾元素值为:5
7.容量操作
1.使用size()返回容器中元素的个数(即元素的大小):
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
cout << "容器的大小为:" << v2.size() << endl;
结果如下:
1 2 3 4 5
容器的大小为:5
2.使用capacity()返回容器的容量:
上面提到的size表示当前容器中实际存储的元素数量,size可以动态变化,随着元素的增加或删除而变化。capacity表示容器当前分配的内存空间能够容纳的元素数量,即它的实际容量。capacity可以大于、等于或小于size。当 size达到capacity时,vector可能会重新分配内存以增加容量,具体取决于 vector 的实现。
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
cout << "容器的容量为:" << v2.capacity() << endl;
结果如下:
1 2 3 4 5
容器的容量为:5
2.使用empty()检查容器是否为空:
在这里我们使用三目运算符来输出结果。
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
cout << (v2.empty() ? "容器为空" : "容器不为空") << endl;
结果如下:
1 2 3 4 5
容器不为空
3.使用resize(n1)重新改变容器的大小:
我们先用resize()去修改容器的大小,之后我们再一次遍历输出容器,观察一下结果:
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
cout << "容器的大小为:" << v2.size() << endl;
v2.resize(10);
cout << "容器修改后的大小为:" << v2.size() << endl;
print(v2);
结果如下:
1 2 3 4 5
容器的大小为:5
容器修改后的大小为:10
1 2 3 4 5 0 0 0 0 0
我们可以发现,当我们重新改变容器的大小后,多出的空间会补0。那我们把空间改小呢?
vector<int> v2 = { 1, 2, 3, 4, 5 };
print(v2);
cout << "容器的大小为:" << v2.size() << endl;
v2.resize(3);
cout << "容器修改后的大小为:" << v2.size() << endl;
print(v2);
我们发现大小变为3,而元素也只剩下了前三个。
1 2 3 4 5
容器的大小为:5
容器修改后的大小为:3
1 2 3
4.使用reserve(n1)预留空间,但不改变大小:
当你向 vector 中添加元素时,vector 会自动分配内存以容纳这些元素。然而,由于内存分配是相对耗时的操作,频繁的重新分配可能会导致性能下降。通过使用 reserve,你可以在添加元素之前预先分配一定数量的存储空间,从而减少内存重新分配的次数,这可以在一些场景下提高性能。
v2.reserve(1000);//为容器v2预留1000个元素的存储空间
5.使用shrink_to_fit()用来减小向量的容量,使其等于元素数量:
vector<int> v2 = { 1, 2, 3, 4, 5, 6, 7, 8 };
print(v2);
cout << "容器的大小为:" << v2.size() << endl;
cout << "容器的容量为:" << v2.capacity() << endl;
v2.pop_back();
v2.pop_back();
cout << "容器尾删两遍的大小为:" << v2.size() << endl;
cout << "容器尾删两遍的容量为:" << v2.capacity() << endl;
v2.shrink_to_fit();
cout << "容器shrink_to_fit适配后的大小为:" << v2.size() << endl;
cout << "容器shrink_to_fit适配后的容量为:" << v2.capacity() << endl;
print(v2);
结果如下:
1 2 3 4 5 6 7 8
容器的大小为:8
容器的容量为:8
容器尾删两遍的大小为:6
容器尾删两遍的容量为:8
容器shrink_to_fit适配后的大小为:6
容器shrink_to_fit适配后的容量为:6
1 2 3 4 5 6
我们可以看到,当我们尾删操作后,虽然容器的大小,即容器内元素的个数已经变成6,但是容器实际的容量还是8,当我们使用shrink_to_fit后,才能把容器中已经空闲的空间分离出去。
8.迭代器操作:
begin():返回指向第一个元素的迭代器。
end():返回指向最后一个元素后一个位置的迭代器。
rbegin():返回指向最后一个元素的逆向迭代器。
rend():返回指向第一个元素前一个位置的逆向迭代器。
#include<iostream>
using namespace std;
#include <vector>}
int main() {
vector<int> v2 = { 1, 2, 3, 4, 5};
for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++)
{
cout << (*it) << " ";
}
cout << endl;
cout << "反向遍历后:" << endl;
for (vector<int>::reverse_iterator rit = v2.rbegin(); rit != v2.rend(); rit++)
{
cout << (*rit) << " ";
}
return 0;
}
注意反向迭代器是reverse_iterator。
结果如下:
1 2 3 4 5
反向遍历后:
5 4 3 2 1
Vector容器的讲解到此结束,感谢观看!欢迎各位的点赞与关注!您的点赞和关注是我学习更新的动力!