C++高级学习:第五节-vector容器(下)

本文详细介绍了C++Vector容器中的元素修改、访问方法(包括下标、迭代器、at操作符等),以及容量操作(如size(),capacity(),empty(),resize(),reserve(),shrink_to_fit())和迭代器操作。通过实例展示了这些操作在实际编程中的应用。
摘要由CSDN通过智能技术生成

  [微信公众号: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容器的讲解到此结束,感谢观看!欢迎各位的点赞与关注!您的点赞和关注是我学习更新的动力!

  • 43
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值