数据结构——vector数组c++(超详细)

发布于:2025-07-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

Hi,我是汉堡,今天讲啥自己看标题,我就不说废话了,直接开始


vector和普通数组的区别

vector是普通数组的全面加强版,简单一点说:普通数组有的功能vector也有,普通数组没的功能它还有。

它内置了许多函数,方便我们处理数组,有的平常写题用不到,可见函数功能之多。

它是动态的,啥叫动态,就是不用时长度为零,用的时候长度不是死的,而是通过内部存储的元素的多少来变大变小。就像一个皮筋袋子,里面不装东西时是很小的,装一点儿东西时,只有一个东西的大小,装多少就多大。就像下面这张图:
在这里插入图片描述
刚开始没装东西,数组就不大,后面装的东西越多他越大,不断变化。而不是像普通数组一样,定住它多大它就多大。

那么下面看看咋用吧


vector数组的定义和初始化

定义

定义格式是: v e c t o r < 类型 > 变量名 vector<类型> 变量名 vector<类型>变量名
类型啥都行: i n t , s t r i n g , c h a r , d o u b l e int,string,char,double int,string,char,double等等
就像下面这个代码一样:

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> a;
    return 0;
}

在这个代码里,我就定义了一个 i n t int int类型的叫 a a a的vector数组。但是你会问:“普通数组还需要写这个数组的大小,但是这个为啥不写大小?”,这就是我说的,他是动态的,没有死大小,你在后面直接加元素就行了,他会被撑大。但是它能写死大小吗?当然可以,这么强大的数据结构,功能自然齐全,如何用请看初始化。如果不能,c++的开发者早回家种地了


初始化

1
vector<int> a(10);

这一种就是我刚在说的定义死大小。代码中是定义了一个大小为10的数组,但是这一种定法和传统数组不同,vector直接帮你每一位初始化成0


2
vector<int> a(10,2);

这也是定义一个死数组,不过比1的定义方法高级一点, 10 10 10的后面多了一个数,这个数代表每一位初始化成的数。
像代码中的一样, 10 10 10个位置都初始化成了 2 2 2
举个例子:

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> a(10,2);
    for(int i=0;i<10;i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

如代码,最后的执行结果是:
在这里插入图片描述


3
vector<int> a={1,2,3,4,5};

这是最普通的初始化方式,也是最传统的初始化方式。大家一定都知道,普通数组通常这样初始化,不过这里的vector数组的位置又是动态的了,你在{}中写几个元素,他就有几个位置
例子来喽!

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> a={1,2,3,4,5};
    for(int i=0;i<5;i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

结果是:
在这里插入图片描述
1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5吧!


vector数组的读取

这个没啥好讲的,真的!

int x=a[1];

我获取 a a a的第一个位置的值(其实是第二个坑),就和普通数组的读取方式一毛一样!


vector数组内置函数

这是个重点哦!

.push_back()

这是一个必备函数,用于在数组的尾部再添加一个元素,大家都知道vector是弹性的,动态的,用它添加一个元素,数组就会更长的一些。要添加的元素填在括号里

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> a;
    a.push_back(5);
    cout<<a[0];
    return 0;
}

执行结果是

5

代码中,先定义了一个 i n t int int类型的vector数组,然后用push_back(5),也就是说在尾部添加了一个元素 5 5 5,原来数组里面没有任何元素,添加的尾部就是添加到 a [ 0 ] a[0] a[0]这个位置,添加了 5 5 5,最后输出,输出了 5 5 5


.size()

这个大家看函数名就能猜出来,获取长度的函数!

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> a;
    a.push_back(5);
    a.push_back(10);
    a.push_back(1);
    cout<<a.size();
    return 0;
}

运行结果是

3

如代码,添加了三个元素,此时有 3 3 3个位置,获取长度就是 3 3 3,长度就输出了出来


.pop_back()

这个函数的作用和push_back()很像,push_back()是在尾部添加一个元素,而pop_back()是删除尾部的元素

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> a;
    a.push_back(5);
    a.push_back(10);
    a.push_back(1);
    a.pop_back();
    for(int i=0;i<a.size();i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

输出结果是

5 10

看代码,定义了一个 i n t int int类型的数组,添加了三个元素,后来又删除了最后的元素, 1 1 1是最后的的元素被删掉了, a a a的长度自然少了 1 1 1,最后输出整个数组, 1 1 1没有输出出来,那就对了!


.clear()

这个函数很简单,只是把数组清空

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> a;
    a.push_back(5);
    a.push_back(10);
    a.push_back(1);
    a.clear();
    cout<<a.size();
    return 0;
}

执行结果如下

0

代码中,存入三个元素,然后用清空函数全都清空了,最后输出长度,是 0 0 0,说明数组里没东西了


.erase()

这个是pop_back()的升级版,作用是删除指定位置的元素,不过这个元素是迭代器,啥是迭代器:用来遍历容器的工具。

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> a;
    a.push_back(5);
    a.push_back(10);
    a.push_back(1);
    a.erase(a.begin());
    for(int i=0;i<a.size();i++)
        cout<<a[i]<<" ";
    return 0;
}

9行中的a.beign(),就是获取首位的迭代器,我在这里写了一个首尾的迭代器,就是删掉第 0 0 0个位置上的元素,此时数组里只剩下 10 , 1 10,1 10,1,接着一个一个输出,输出结果是:

10 1

.empty()

这个函数是判断数组是否为空的,这是一个bool类型的函数,如果是空就返回true,不是空的就返回false

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> a;
    a.push_back(5);
    a.push_back(10);
    a.push_back(1);
    a.clear();
    if(a.empty()==true)
        cout<<"空了";
    else
        cout<<"不空";
    return 0;
}

这段代码的执行结果是:

空了

这段代码先在数组里添加了3个元素,接着把他清空了,数组为空。接下来判断数组是否为空,数组是空的,empty()返回了true,进入了大括号内,输出“空了”。


总结

以上讲解了vector数组的一些常用功能,但是可能还不全,我只是挑了一些常用的功能,具体在题上如何用,还需你学透之后,不断实战,熟悉这个数据结构。

好了,我是小汉堡,拜拜,点赞和关注可以吗?