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 << "\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
输出格式:
出圈的编号
输入输出样例
10 3
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:动态数组的更多相关文章
- C++ vector动态数组
#include<vector>头文件 vector类称作向量类 百度百科的解释:https://baike.baidu.com/item/vector/3330482 我喜欢把知识点拿出 ...
- C++向量 vector动态数组
需要包含头文件, #include <vector> using namespace std; vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所 ...
- Vector(动态数组)怎么用咧↓↓↓
定义方式:vector<int> a; //二维vector<int>a[100] 在末尾压入容器:a.push_back(x);//二维 a[i].push_back(x) ...
- 八连通(vector动态数组法)
题目和一般的八连通一样,但行数和列数未定,相乘对于1e6,直接开a[1e6][1e6]的数组肯定会爆内存.用二维的动态vector就能很好的解决这个问题 #include<bits/stdc++ ...
- C++ Vector 动态数组
Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...
- vector动态数组
vector是STL模板库中的序列式容器,利用它可以有效地避免空间的浪费. 创建vector容器 vector< int >v:vector< char >:vector< ...
- vc++简单的vector动态数组实现
#ifndef __MYVECTOR__ #define __MYVECTOR__ #include <Windows.h> #define SUCCESS 1 // 成功 #define ...
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- 学习日记--用Vector(向量)实现动态数组
Vector的使用方法: 能在添加元素时增加长度的数组称为动态数组或可变长数组.相对地,必须事先指定长度,只能容纳一定数量元素的数组称为静态数组.下面分享一下如何借助STL(标准模板库)中的Vecto ...
随机推荐
- SSM项目之电商项目easymall(一)
一 环境准备 软件环境: 1 jdk1.8 JAVA_HOME:是给软件用的,各种启动的软件都会寻找JAVA_HOME的环境变量: Path:给windows用的: ...
- 【Linux资源管理】一款优秀的linux监控工具——nmon
(一)nmon工具概述 nmon是以一个用来做linux服务器监控的工具,通过nmon,可以实现对以下参数的监控: --CPU使用率 --内存.交换空间使用率 --网络使用情况 --磁盘I/O,读写速 ...
- ArrayList详解
一.ArrayList类介绍:(这里给出jdk1.8源码上中文翻译) ArrayList是List接口以可变数组方式实现的,实现了所有的lis接口中的操作,并容许有null等所有元素.除了实现了Lis ...
- 【2013 ICPC亚洲区域赛成都站 F】Fibonacci Tree(最小生成树+思维)
Problem Description Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to do s ...
- Linux基础(03)、常用基础指令和操作
目录 一.什么是Linux 二.常用基础指令 2.1.vi编辑 2.2.Linux文件类型 2.3.常用指令:增.删.改.查.其他 三.Linux的目录和权限 3.1.目录 3.2.权限 3.3.修改 ...
- openstack之kvm常用操作
KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理. 1. 查看KVM虚拟机配置文件及运行状态 KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/ autostart目录 ...
- APSC4xSeries_Ver32.exe在win764位提示缺少DLL错误解决办法
APSC4xSeries_Ver32.exe在win764位提示缺少DLL错误解决办法 从网上下载oatime_epson-me1清零软件,Stylus4xProgram_Ver32的 解决办法:还是 ...
- MPP调研
一.MMP数据库 MPP是massively parallel processing,一般指使用多个SQL数据库节点搭建的数据仓库系统.执行查询的时候,查询可以分散到多个SQL数据库节点上执行,然后汇 ...
- ecshop跨站漏洞详情及修补网站漏洞
ecshop目前最新版本为4.0,是国内开源的一套商城系统,很多外贸公司,以及电商平台都在使用,正因为使用的人数较多,很多攻击者都在挖掘该网站的漏洞,就在最近ecshop被爆出高危漏洞,该漏洞利用跨站 ...
- js分片上传大文件,前端代码
首先导入jQuery.form.js文件,下面src是相对于改js文件位置, <script type="text/JavaScript" src="jquery/ ...