zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    第五周:函数
    第四周:循环控制
    第三周:循环
    第二周:判断
    第一周:简单的计算程序
    cocos2dx-lua采用pbc解析proto问题修正
    cocos2dx 3.9.1 mac模拟器log输出bug修正
    基于dragonbones的cocos2dx lua封装
    EF 3.0 要开启 数据库连接复用 MultipleActiveResultSets=true
    找不到资产文件“xxxxobjproject.assets.json
  • 原文地址:https://www.cnblogs.com/52dxer/p/10407845.html
Copyright © 2011-2022 走看看