欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > [C++] STL中的向量容器<vector>(讲解+练习)

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

2025/4/21 7:29:03 来源:https://blog.csdn.net/t54SB/article/details/147168711  浏览:    关键词:[C++] STL中的向量容器<vector>(讲解+练习)

vector

  • vector 简介
  • vector使用
    • 定义
    • 基本操作
    • 高级操作
  • 练习
    • 倒序输出
    • 篮球比赛
      • 题目描述
      • 输入格式
      • 输出格式
      • 输入样例
      • 输出样例
      • 数据范围
      • AC代码
    • 球迷
      • 题目描述
      • 输入格式
      • 输出格式
      • 输入样例
      • 输出样例
      • 数据范围
      • AC代码

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 9234
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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com