C++ STL 容器篇之向量vector

vector是我们经常使用的一个容器,可以看他看作为一个不定长数组。不仅如此,它还把一些常用的操作封装在了vector类型内。

声明

vector是一个模板类,每次使用时需要定义类型,例如vector a这样来声明一个vector。vector是一个类似于int a[]的整数数组。

操作

下面列举一些vector常用的操作

函数名作用
push_back在vector的最后添加一个数据
pop_back删除vector最后一个元素
at返回相应编号位置的值
begin得到vector头的指针
end得到vector最后一个位置+1的指针
front得到vector头的引用
back得到vector的最后一个单元的引用
max_size返回vector最大的大小
capacity返回当前vector分配的大小
size返回当前的vector大小
resize修改档期vector所分配空间的大小
erase删除指针所指向的数据线
clear清空vector
empty判断vector是否为空
swap与另一个vector交换数据

使用示例

下面我们通过对一段程序来展示如何使用vector。在程序中我们深入的了解一下如何使用vector。

#include<iostream>
#include<vector>
#include<iterator>
using namespace std;
int main(){
    vector<int> demo;//定义一个类型为int的vector 名为demo
    if (demo.empty()) {
        cout<<"如果demo是空的,则demo.empty()的返回值为True"<<endl;
    }
    for (int i = 0; i < 10; i++) {//在demo中插入0~9共10个数字
        demo.push_back(i); //在demo的末尾插入数据
    }
    for (int i = 0; i < demo.size(); i++){
        //输出demo中的所有的值,demo.size()返回demo中共有多少个数据
        //vector可以像数组一样,通过下标来获取值
        cout << demo[i]<<" ";
    }
    cout<<endl;
    cout<<"通过demo.at(3)来获取demo中第4个元素的值,即demo[3]的值为:"<<demo.at(3)<<endl;
    demo.pop_back();//删除demo中的最后一个元素
    for (int i = 0; i < demo.size(); i++){
        //再次输出demo中所有的值
           cout << demo[i]<<" ";
       }//此时只输出了0~8 vector中的最后一个元素9已经被删除
    cout<<endl;
    //下面我们在结合迭代器来演示vector的一些操作,以及迭代器的一些简单的操作。
    vector<int>::iterator it;//定义一个vector<int>类型的迭代器,名为it
    it = demo.begin();//给迭代器it赋值,为demo的首位置,即demo[0]的位置。begin()返回vector的第一个位置。
    it = it + 2;//我们可以通过+和-来移动it的位置,it+2后所指的位置为demo中第3个位置,即demo[2]
    demo.erase(it);//erase()的作用为删除当前迭代器所指位置的元素,并将后面的所有元素向前移动一位。这这里面即删除demo[2],后面的元素向前移动一位。
    for (int i = 0; i < demo.size(); i++){
        //我们可以输出来查看demo中的值,发现只有0 1 3 4 5 6 7 8 里面原本的元素“2”已经被删除
        cout << demo[i]<<" ";
    }
    cout<<endl;
    //我们在用vector时,通常会有迭代器对他进行操作,例如输出vector中所有的元素,我们除了上面的方法,也可以使用迭代器来进行
    for (it = demo.begin(); it != demo.end(); it++) {
        //begin()返回vector中首元素的位置,end()返回vector中最后一个元素+1的位置
        cout<<*it<<" ";//这边的迭代器是指针,所以我们要用*it才获取所指向地址的内容
    }
    cout<<endl;
    if (demo.empty()) {
        cout<<"如果demo是空的,则demo.empty()的返回值为True"<<endl;
    }
    else{
        cout<<"当前vector不为空"<<endl;
        demo.clear();//clear()函数是作用是清空vector的所有元素
        if (demo.empty()) {
            cout<<"现在已经通过clear()函数清空vector中的所有内容"<<endl;
        }
    }
    return 0;
}

输出结果为:

如果demo是空的,则demo.empty()的返回值为True
0 1 2 3 4 5 6 7 8 9 
通过demo.at(3)来获取demo中第4个元素的值,即demo[3]的值为:3
0 1 2 3 4 5 6 7 8 
0 1 3 4 5 6 7 8 
0 1 3 4 5 6 7 8 
当前vector不为空
现在已经通过clear()函数清空vector中的所有内容
Program ended with exit code: 0

这段程序大家也可以自己编译在自己的机器上运行一下,来帮助理解vector的一些操作。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐