欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vector

程序员文章站 2022-03-01 23:20:57
...

vector

定义

vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
一般作用:当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。

定义vector

头文件:#include< vector >

定义一维vector:vector<类型名>容器名,容器名,容器名…;

定义多维vector:

注意:在定义多维vector时,最后的> > >…一定要用空格隔开,不然电脑会认为是其它符号
定义二维vector: vector< vector < 类型名 > >容器名,容器名,容器名…;
定义三维vector: vector< vector < vector < 类型名 > > >容器名,容器名,容器名…;
以此类推…

vector成员函数

1、
push_back:在vector的最后添加一个数据:容器名.push_back(数据);

#include<vector>
using namespace std;
vector<int>a;//int类型
int main()
{
	a.push_back(1);//添加1这个数字
	return 0;
}

2、
pop_back:删除vector的最后一个数据 :容器名.push_back();

#include<vector>
using namespace std;
vector<int>a;//int类型
int main()
{
	a.push_back(1);//添加1这个数字
	a.pop_back();//删除vector的最后一个数据,也就是把数字1删了
	return 0;
}

3、
at: 得到编号位置的数据(相当于[]):容器名. at(); 或者 容器名[下标]; 注意:vector的下标是从0开始计数的

#include<vector>
#include<iostream>//cin、cout头文件
using namespace std;
vector<int>a;//int类型
int main()
{
	a.push_back(1);//添加1这个数字
	cout<<a[0]<<" "<<a.at(0);//输出
	a.pop_back();//删除vector的最后一个数据,也就是把数字1删了
	return 0;
}

运行结果:

1 1

4、
begin:得到数组头的指针容器名. begin();
end:得到数组的最后一个数据+1的指针容器名. end();
运用:sort(容器名.begin(),容器名.end()); —>给vector中的数据排序(默认从小到大)
输入一个数n,表示有n个待排序的数,输入n个数,排序后从小到大输出它们的顺序

#include<vector>
#include<fstream>//scanf、printf头文件
#include<algorithm>//sort的头文件
using namespace std;
vector<int>a;//int类型
int n,num;
int main()
{
	scanf("%d",&n);//表示有n个数字
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&num);//输入n个数字
		a.push_back(num);//添加数字
	}
	sort(a.begin(),a.end());//排序
	for(int i=0;i<n;i++)//vector的下标是从0开始计数的
	{
		printf("%d ",a[i]);//也可以是printf("%d ",a.at(i));
	}
	return 0;
}

输入数字:
20
1 -1 0 -500 25620 251 6 0 12 -4565 354 23 3202 4156 9 8 46 -546 23 20
输出结果:

-4565 -546 -500 -1 0 0 1 6 8 9 12 20 23 23 46 251 354 3202 4156 25620 

5、
front:引用vector第一个数据:容器名. front();
back:引用vector最后一个数据:容器名. back();

#include<vector>
#include<fstream>//scanf、printf头文件
using namespace std;
vector<int>a;//int类型
int n,num;
int main()
{
	scanf("%d",&n);//表示有n个数字
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&num);
		a.push_back(num);//添加数字
	}
	printf("%d %d",a.front(),a.back());
	return 0;
}

输入数据:

5 
1 2 3 4 5

运行结果:

1 5

6、
size:当前使用数据的长度:容器名. size();

#include<vector>
#include<fstream>//scanf、printf头文件
using namespace std;
vector<int>a;//int类型
int n,num;
int main()
{
	scanf("%d",&n);//表示有n个数字
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&num);
		a.push_back(num);//添加数字
	}
	printf("%d",a.size());
	return 0;
}

输入数据:

5 
1 2 3 4 5 

运行结果:

5

7、
empty:判断vector是否为空,不为空返回true,否则返回false:容器名. empty();
8、
swap:与另一个vector交换数据:swap(容器名,容器名);

#include<vector>
#include<iostream>
using namespace std;
vector<int>a,b;//int类型
int main()
{
	a.push_back(1);
	b.push_back(2);
	cout<<a[0]<<" "<<b[0]<<endl;
	swap(a,b);
	cout<<a[0]<<" "<<b[0]<<endl;
	return 0;
}

运行结果:

1 2
2 1

9、
clear:清空当前的vector:容器名. clear();

#include<vector>
#include<iostream>
using namespace std;
vector<int>a;//int类型
int main()
{
	a.push_back(1);
	cout<<a[0]<<endl;
	a.clear();
	a.push_back(100);
	cout<<a[0]<<endl;
	return 0;
}

运行结果:

1
100

10、
resize:改变当前使用数据的大小,如果它比当前使用的小,删除多出的部分,如果它比当前使用的大,就填充默认值(一般为0)

#include<iostream>
#include<vector>
using namespace std;
vector<int>a;
int main()
{
	for(int i=10;i>=1;i--)a.push_back(i);
	//输入10~1一共10个数字
		
	for(int i=0;i<10;i++)//vector的下标是从0开始计数的
	cout<<a.at(i)<<" ";
	cout<<endl;
	
	a.resize(12);//改变当前使用数据的大小,比当前使用的大,所以填充默认值0
	
	for(int i=0;i<12;i++)
	cout<<a.at(i)<<" ";
	cout<<endl;
	
	a.push_back(100);//输入100这个数字
	
	for(int i=0;i<13;i++)//大小变为13
	cout<<a.at(i)<<" ";
	cout<<endl;
	
	a.resize(5);//改变当前使用数据的大小,比当前使用的小,所以删除多出部分
	
	for(int i=0;i<5;i++)
	cout<<a.at(i)<<" ";
	cout<<endl;
	
	return 0;
}

运行结果:

10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1 0 0
10 9 8 7 6 5 4 3 2 1 0 0 100
10 9 8 7 6

多维数组输出

与数组类似,格式如下:容器名[下标][下标]…

多维数组赋值

方法一:与数组嵌套

列:

#include<iostream>
#include<vector>
using namespace std;
vector<int>a[10];//与数组嵌套
int main()
{
	a[10].push_back(10);
	a[10].push_back(25);
	cout<<a[10][1]<<endl;
	return 0;
}

运行结果:

25

方法二

不像二维数组那样,可以直接对arr[i][j]进行循环赋值。在vector<vector>中,因为vector是一个容器,最外层的vector容器中放着更小的vector,而里层的vector里面放的是int型的数字。所以我们首先要对里层的vector容器赋值,然后再把里层的vector作为元素插入到外层的vector中。
例子:输入一个n行m列的二维数组,再输出

#include<iostream>
#include<vector>
using namespace std;
vector<vector<int> >a;//这里注意要加空格隔开两个‘>’
vector<int>b;//一维vector
int n,m,num;
int main()
{
    cin>>n>>m;//输入
    for (int i=1;i<=n;i++){
        b.clear();//每次记得清空数组
        for(int j=1;j<=m;j++)
        {
            cin>>num;
            b.push_back(num);
        }
        a.push_back(b);//把里层的vector作为元素插入到外层的vector中
    }
    //输出
	cout<<endl;
    for(int i=0;i<n;i++)//从0开始
    {
        for(int j=0;j<m;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

输入数据:

3 4
1 2 3 4
5 6 6 5
4 3 2 1

运行结果:

1 2 3 4
5 6 6 5
4 3 2 1
相关标签: vector