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 ...
随机推荐
- HTML&CSS笔记001
lesson1 <!DOCTYPE html><html lang="en,zh"><!-- 告诉搜索引擎爬虫,我们的网站是关于什么内容的 --> ...
- GPUImage源码解读之GPUImageContext
GPUImageContext类,提供OpenGL ES基本上下文,GPUImage相关处理线程,GLProgram缓存.帧缓存.由于是上下文对象,因此该模块提供的更多是存取.设置相关的方法. 属性列 ...
- 初学pygame
#Author:cljimport pygamepygame.display.set_mode((640,480),0,32)#设置窗口大小 返回的也是一个surface对象,resolution可以 ...
- Elasticsearch插件安装
从github获取插件包例如Head git clone git://github.com/mobz/elasticsearch-head.git 在elasticsearch安装目录中创建插件存放目 ...
- 执行上下文--变量、函数、this
原文地址:https://www.xingkongbj.com/blog/js/execution-context.html JavaScript 中的执行上下文和调用栈 ES6 变量作用域与提升:变 ...
- laravel5.5源码阅读草稿——入口
laravel的启动需要通过路由.中间件.控制器.模型.视图最后出现在浏览器.而路由.中间件.模型,这些功能都有自己的类,比如Route::any().DB::table().$this->mi ...
- [Doctrine Migrations] 数据库迁移组件的深入解析三:自定义数据字段类型
自定义type 根据官方文档,新建TinyIntType类,集成Type,并重写getName,getSqlDeclaration,convertToPHPValue,getBindingType等方 ...
- asp.net在一般处理程序里面操作Session
1.要在一般处理程序中获取其他页面的session值,需要引用名空间: using System.Web.SessionState; 2.然后继承一个接口:IRequiresSessionState ...
- IPV6路由技术
OSPFV3 一.OSPFv3概述:协议号89 1.概念: OSPFv3是ospf(开放式最短路径优先)版本3的简称,主要提供对IPV6的支持,遵循的标准为RFC2740(OSPF for IPv6) ...
- C语言经典程序100例
-------------------------------------------------------------------------------- [程序1] 题目:古典问题:有一对兔子 ...