vector:动态数组

vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

头文件:#include<vector>

参数:vector<int>v,  int为数据类型,也可以是string,long long,double

代码 

含义

 v.push_back()

在vector最后添加一个元素

v.pop_back()

移除最后一个元素

v.insert()

插入元素到Vector中

v.back()

返回最末一个元素

v.begin()

 返回第一个元素的迭代器

v.end() 

返回最末元素的迭代器(译注:实指向最末元素的下一个位置)

v.erase()

删除指定元素

v.size()

获取v的大小

v.empty()

判断v是否为空

v.clear()

清空向量中元素,但不清空内存

vv=v

复制

vv==v      

比较:==、!=、>、>=、<、<=都可以用

基本使用方法:

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

int main() {

	// 定义:

	vector<int>v;							// 定义一个int型动态数组v
	vector<int>v1(5, 2);					// 定义一个int型大小为5,值为2的动态数组v1,int型值默认为零
	vector<string>s(6, "hi");				// 定义一个string型大小为6,值为“hi”的动态数组s,string型值默认为“”


	v.push_back(7);							// v不知道v大小,输入必须用push_back
											//cin >> v1[1];							// v1知道大小,可以用cin



	for (int i = 0; i < v.size(); i++)		// 第一种方法:
		cout << v[i];

	cout << "

";

	for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)// 第二种方法:迭代器
		cout << *it;

	cout << "

";

	// 插入		v:7  v1:22222

	v1.insert(v1.begin(), 3);				// 在v1头部插入3  结果:322222
	v1.insert(v1.end(), 5);					// 在v1尾部插入5  结果:3222225
	v1.insert(v1.begin() + 2, 3, 6);			// 在v1[2]前插入3个6 结果:3266622225
	v1.insert(v1.begin(), v.begin(), v.end());	// 在v1头部插入v		结果:73266622225

												// 删除

	v1.erase(v1.begin());					// 删除首元素		结果:3266622225
	v1.erase(v1.begin(), v1.begin() + 3);	// 删除从v1.begin()到v1.begin() + 3之间的元素,不包括v1.begin() + 3
											//					结果:6622225



											// 二维的动态数组

	vector<vector<int> > v2;				// 定义一个int型,二维动态数组v2,两个大于号之间打个空格,否则有些编译器辨别不出
	vector<vector<int> > v3(12);

	for (int i = 0; i < 10; i++) {
		vector<int> t(i, i);				//v2的类型是vector<int> 所以只能压入vector<int> 类型
		v2.push_back(t);					//压入i个i
	}
	v2.push_back(vector<int>(5, 3));			//压入5个3

	for (int i = 0; i < v2.size(); i++) {
		for (int j = 0; j < v2[i].size(); j++) {
			cout << v2[i][j];
		}
		cout << "
";
	}
	/*
	输出结果:

	1
	22
	333
	4444
	55555
	666666
	7777777
	88888888
	999999999
	33333

	*/
	return 0;
}

例题:

题目描述

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

输入输出格式

输入格式:

n m

输出格式:

出圈的编号

输入输出样例

输入样例#1: 
10 3
输出样例#1: 
3 6 9 2 7 1 8 5 10 4

说明

m,n100

vector:

#include<iostream>
#include<vector>
using namespace std;
int main() {
	int n, m,ans=0;
	vector<int>v;
	cin >> n >> m;
	if (n <= 0 || m <= 0)return 0;

	for (int i = 1; i <=n; i++) {
		v.push_back(i);
	}

	while (!v.empty()) {

		ans = (ans + m - 1) % v.size();			//因为每次都是站在第一个,再加上(m-1)个就行了
												//要不断地mod,相当于不断地在一排数循环

		cout << v[ans] << " ";


		v.erase(v.begin() + ans);				//删除输出的元素
	}
	return 0;
}

  

原文地址:https://www.cnblogs.com/52dxer/p/10407845.html