[C++] STL中的向量容器<vector>(讲解+练习)

vector 简介

vector属于STL库, 需要#include <vector>才能使用.
vector其实相当于一个动态一维数组.

vector使用

定义

四种不同情况:

vector<int> v;	// 声明一个存int类型变量的vector容器, 初值默认为空
vector<int> v2(20); // 声明一个大小20的vector容器
vector<int> v3(20, 1); // 声明一个大小20的vector容器, 所有元素初值为1
vector<int> v4[10]; // 相当于二维数组, v4中每个元素都是vector

基本操作

注: vector和普通数组一样, 下标从0开始

v.push_back(x) // 将x插入到容器末尾
v.pop_back() // 删除末尾元素
v.clear() // 清空容器
v[x] = n // 将下标x的元素赋值为n
v[x] // 访问下标x的元素
v.size() // 元素个数

高级操作

vector本质上其实是变量(而非数组), 所以可以直接使用swap()函数交换两个vector类型变量.

练习

倒序输出

输入一串数据, 除了末尾0以外都是正整数, 请倒序输出这串数据, 要求使用vector.

#include <iostream>
#include <vector>

vector<int> v;

int main()
{
	while(true){
		int x;
		cin >> x;
		if(x == 0) break;
		a.push_back(x);
	}
	int len = a.size();
	for(int i = len - 1; i >= 0; i--){
		cout << a[i] << " ";
	}
	return 0;
}

篮球比赛

题目描述

青蛙班里的 n 名同学分成两组进行篮球比赛。分组时,老师为了避免同学们熟人抱团,规定:同学们先随机排好队,按顺序交替加入队伍一、队伍二。但当 1 号青蛙正要加入前,两个队伍要交换所有队员。那么,最终队伍一、二的名单是?

输入格式

输入共 2 行:
第 1 行,1 个正整数 n,为班级人数;
第 2 行,n 个正整数a[1], a[2], ..., a[n] ,为皮皮班里同学的学号,保证为 1~n 各一个,其中青蛙为 1 号。

输出格式

输出共 2 行:
第 1 行,若干个正整数,为队伍一的队员,按加入顺序输出;
第 2 行,若干个正整数,为队伍二的队员,按加入顺序输出。

输入样例

6
3 4 1 6 5 2

输出样例

4 1 5
3 6 2

数据范围

1 ≤ n ≤ 500,000; 1 ≤ a[1], a[2], ..., a[n] ≤ n,且为 1~n 各一个。

AC代码

#include <iostream>
#include <vector>
using namespace std;

vector<int> v1, v2;

int main(){
	int n;
	cin >> n;
	for(int i = 0; i < n; i++){
		int x;
		cin >> x;
		if(x == 1) swap(v1, v2);
		if(i % 2 == 1) v1.push_back(x);
		else v2.push_back(x);
	}
	for(int i = 0; i < v2.size(); i++) cout << v2[i] << ' ';
	cout << endl;
	for(int i = 0; i < v1.size(); i++) cout << v1[i] << ' ';
	return 0;
}

球迷

题目描述

10 支篮球队伍加入了最终的篮球大赛!篮球队伍编号为 0~9。每个篮球队伍都有自己的球迷团,每位球迷都有自己的编号,约定球迷编号的最后一位数代表它支持的队伍,例如 1342 号末尾为 2,因此他是 2 号队伍的球迷团成员。
请根据 n 个球迷的编号,确定每支队伍的球迷团名单。

输入格式

输入共 2 行:
第 1 行,一个整数 n,为球迷总人数;
第 2 行,n 个整数a[1], a[2], ..., a[n], 依次为球迷编号.

输出格式

输出共 10 行:
每行依次为0,1,…,9号队伍的球迷编号,每支队伍的球迷按输入顺序排列;
如队伍无球迷,仍要输出一个空行。

输入样例

10
22 34 32 55 21 56 7 98 52 92

输出样例

21
22 32 52 92

34
55
56
7
98

数据范围

1 ≤ n ≤ 100,000; 1 ≤ a[1], a[2], ..., a[n] ≤ 100,000,000.

AC代码

#include <iostream>
#include <vector>
using namespace std;

vector<int> v[15];

int main(){
	int n;
	cin >> n;
	for(int i = 0; i < n; i++){
		int x;
		cin >> x;
		v[x % 10].push_back(x);
	}
	for(int i = 0; i <= 9; i++){
		int len = v[i].size();
		for(int j = 0; j < len; j++) cout << v[i][j] << ' ';
		cout << endl;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值