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 << "\n\n"; for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)// 第二种方法:迭代器
cout << *it; cout << "\n\n"; // 插入 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 << "\n";
}
/*
输出结果: 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,n≤100

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

  

vector:动态数组的更多相关文章

  1. C++ vector动态数组

    #include<vector>头文件 vector类称作向量类 百度百科的解释:https://baike.baidu.com/item/vector/3330482 我喜欢把知识点拿出 ...

  2. C++向量 vector动态数组

    需要包含头文件, #include  <vector>    using namespace std; vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所 ...

  3. Vector(动态数组)怎么用咧↓↓↓

    定义方式:vector<int> a; //二维vector<int>a[100] 在末尾压入容器:a.push_back(x);//二维 a[i].push_back(x) ...

  4. 八连通(vector动态数组法)

    题目和一般的八连通一样,但行数和列数未定,相乘对于1e6,直接开a[1e6][1e6]的数组肯定会爆内存.用二维的动态vector就能很好的解决这个问题 #include<bits/stdc++ ...

  5. C++ Vector 动态数组

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  6. vector动态数组

    vector是STL模板库中的序列式容器,利用它可以有效地避免空间的浪费. 创建vector容器 vector< int >v:vector< char >:vector< ...

  7. vc++简单的vector动态数组实现

    #ifndef __MYVECTOR__ #define __MYVECTOR__ #include <Windows.h> #define SUCCESS 1 // 成功 #define ...

  8. 转:用STL中的vector动态开辟二维数组

    用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...

  9. 学习日记--用Vector(向量)实现动态数组

    Vector的使用方法: 能在添加元素时增加长度的数组称为动态数组或可变长数组.相对地,必须事先指定长度,只能容纳一定数量元素的数组称为静态数组.下面分享一下如何借助STL(标准模板库)中的Vecto ...

随机推荐

  1. Lodash数组篇

    概念简述 lodash 是一个类库 Lodash 通过降低 array.number.objects.string 等等的使用难度从而让 JavaScript 变得更简单 用法  let _ = re ...

  2. Python(一)数据结构和算法的20个练习题问答

    数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. 因此,这 ...

  3. 【转载】JavaScript导出Excel

    [转载]JavaScript导出Excel 原文地址 如果没有用到前端插件,也没有用到后台poi导出的话,用js导出也是一种方式.亲测可用. /** * 导出excel */ var idTmr; f ...

  4. 『ACM C++』 PTA 天梯赛练习集L1 | 036-037

    这几天比较忙,所以随便做做水题了,得赶紧把英剧搞完啊啊啊啊啊啊 ------------------------------------------------L1-036-------------- ...

  5. 设计四个线程,其中两个线程每次对j增加1,另外两个线程对j每次减1,写出程序

    /* * 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.写出程序. */ public class ThreadTest { private int j; public sta ...

  6. 02JavaScript用法

    前言: 介绍一下javascript的最基础语法规范和用法. HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 ...

  7. Linux 中的权限

    ABCD A-0, 十进制 B-user(u, 用户) C-group(g, 组用户) D-others(o, 其他用户) +-----+---+--------------------------+ ...

  8. NoSQL入门第三天——Redis配置文件与持久化

    一.解析Redis配置文件redis.conf (Linux下配置多于编码) 1.它在哪 由于我是在root的家目录下载安装的,默认的安装位置就是: conf就在这里: 根据经验,出厂的conf永远不 ...

  9. Android开发——Context类的各种细节问题

    0. 前言   Context相信所有的Android开发人员基本上每天都在接触,因为它太常见了.但实际上Context有太多小的细节并不被大家所关注,那么今天我们就来学习一下那些你所不知道的细节. ...

  10. DATA 转 16 进制

    // 转 16进制 编码 NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMo ...