C++标准模板库(STL)——vector常见用法详解
- vector的定义
vector<typename> name;
相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是“变长数组”。
类似于一维数组,typename可以是任何基本类型,也可以是STL容器。
vector<int> name;
vector<double> name;
vector<char> name;
vector<Node> name; //Node为结构体类型
vector<vector<int> > name;
- vector容器内元素的访问
vector可以通过下标和迭代器来访问。
(1)通过下标访问
这里,可以把vector看成普通数组,访问方式和普通数组一样(如vi[0]、vi[1])。
(2)通过迭代器访问
迭代器可以理解为一种类似于指针的东西,定义为
vector<typename>::iterator it;
通过下面的例子来演示通过迭代器访问数组元素:
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 vector<int> vi;
5 int main()
6 {
7 for(int i=0;i<5;i++){
8 vi.push_back(i+1);
9 }
10 vector<int>::iterator it=vi.begin(); //迭代器指向vi的首地址
11 for(int i=0;i<5;i++){
12 cout<<*(it+i)<<" "; //输出vi[i]
13 }
14 return 0;
15 }
输出结果:
1 2 3 4 5
- vector常用函数
(1)push_back()
push_back(x)功能为在vector后面添加一个元素x,时间复杂度为O(1)。
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 vector<int> vi;
5 int main()
6 {
7 for(int i=0;i<5;i++){
8 vi.push_back(i); //将i的值依次插入到vi的尾部
9 }
10 for(int i=0;i<vi.size();i++){
11 cout<<vi[i]<<" ";
12 }
13 return 0;
14 }
输出结果:
0 1 2 3 4
(2)pop_back()
pop_back()用来删除vector的尾元素,时间复杂度为O(1)。
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 vector<int> vi;
5 int main()
6 {
7 for(int i=0;i<5;i++){
8 vi.push_back(i); //将i的值依次插入到vi的尾部
9 }
10 vi.pop_back(); //删除尾元素
11 for(int i=0;i<vi.size();i++){
12 cout<<vi[i]<<" ";
13 }
14 return 0;
15 }
输出结果:
0 1 2 3
(3)size()
size()用来获得vector中元素的个数,时间复杂度为O(1)。
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 vector<int> vi;
5 int main()
6 {
7 for(int i=0;i<5;i++){
8 vi.push_back(i); //将i的值依次插入到vi的尾部
9 }
10 cout<<vi.size();
11 return 0;
12 }
输出结果:
5
(4)clear()
clear()用来清空vector中的所有元素,时间复杂度为O(n)。
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 vector<int> vi;
5 int main()
6 {
7 for(int i=0;i<5;i++){
8 vi.push_back(i); //将i的值依次插入到vi的尾部
9 }
10 vi.clear(); //清空所有元素
11 cout<<vi.size();
12 return 0;
13 }
输出结果:
0
(5)insert()
insert(it, x)用来向vector的任意迭代器it处插入一个元素x,时间复杂度为O(n)。
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 vector<int> vi;
5 int main()
6 {
7 for(int i=0;i<5;i++){
8 vi.push_back(i); //将i的值依次插入到vi的尾部
9 }
10 vi.insert(vi.begin()+2,10); //将10插入到vi[2]的位置
11 for(int i=0;i<vi.size();i++){
12 cout<<vi[i]<<" ";
13 }
14 return 0;
15 }
输出结果:
0 1 10 2 3 4
(6)erase()
erase()既可以删除单个元素,还可以删除一个区间的所有元素。时间复杂度为O(n)。
删除单个元素
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 vector<int> vi;
5 int main()
6 {
7 for(int i=0;i<5;i++){
8 vi.push_back(i); //将i的值依次插入到vi的尾部
9 }
10 vi.erase(vi.begin()+2); //删除vi[3]
11 for(int i=0;i<vi.size();i++){
12 cout<<vi[i]<<" ";
13 }
14 return 0;
15 }
输出结果:
0 1 3 4
删除一个区间内的所有元素
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4 vector<int> vi;
5 int main()
6 {
7 for(int i=0;i<5;i++){
8 vi.push_back(i); //将i的值依次插入到vi的尾部
9 }
10 vi.erase(vi.begin()+2,vi.begin()+4); //删除vi[2]、vi[3]
11 for(int i=0;i<vi.size();i++){
12 cout<<vi[i]<<" ";
13 }
14 return 0;
15 }
输出结果:
0 1 4
C++标准模板库(STL)——vector常见用法详解的更多相关文章
- C++标准模板库(STL)——set常见用法详解
set的定义 set<typename> name; typename可以是任何基本类型,如int.double.char.结构体等,也可以是STL标准容器,如vector.set.que ...
- C++标准模板库(STL)——queue常见用法详解
queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...
- C++标准模板库(STL)——map常见用法详解
map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...
- STL vector常见用法详解
<算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...
- STL priority_queue 常见用法详解
<算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...
- STL set 常见用法详解
<算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: ...
- STL pair 常见用法详解
<算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...
- STL stack 常见用法详解
<算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...
- STL queue 常见用法详解
<算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...
随机推荐
- 手动脱PeCompact 2.20壳实战
作者:Fly2015 PeCompact壳又是一个没有听说过的壳,需要脱壳的程序是吾爱破解培训的第一课的选修作业四.最近对脱壳有点上瘾了,当然也遭受了脱壳受挫的无奈,但是比较幸运还是把这个壳给搞了. ...
- Python socket(TCP阻塞模式)基础程式
前置知识:Python基础语法,socket库 tips: 1. 默认HOST_IP:127.0.0.1 2. 默认HOST_PORT:7676 参考代码: 1. 客户端程式 #!/usr/bin/e ...
- POJ1094查分约束,判断关系是否唯一
题意: 给你一些a<b的关系,然后有三组询问. 1 当前这组之后如果能确定这n个数的大小关系,那么就输出关系 2 当前时候出现bug,就是和前面如果冲突,那么就不行 3 最后的答案是 ...
- Access数据库及注入方法
目录 Access数据库 Access数据库中的函数 盲注Access数据库 Sqlmap注入Access数据库 Access数据库 Microsoft Office Access是由微软发布的关系数 ...
- 1.简单认识PHP和环境搭建
1.关于PHP PHP(Hypertext Perprocessor,超文本预处理器),是一种服务器端.跨平台.HTML嵌入式的脚本语言,其独特的语法混合了C.Java.和Perl语言的特点,是一种被 ...
- CVE-2017-11882:Microsoft office 公式编辑器 font name 字段栈溢出通杀漏洞调试分析
\x01 漏洞简介 在 2017 年 11 月微软的例行系统补丁发布中,修复了一个 Office 远程代码执行漏洞(缓冲区溢出),编号为 CVE-2017-11882,又称为 "噩梦公式&q ...
- Linux-鸟菜-6-文件与目录管理
Linux-鸟菜-6-文件与目录管理 这章主要是说一些对目录和文件的增删改查等等命令. . 代表当前目录 .. 代表前一个目录 / 的 . 和 .. 一样 - 代表前一个工作目录 ...
- 初探SQL注入需要知道的5个问题
SQL注入产生原理 可控变量(注入点,就是传参) 带入数据库查询 变量未存在过滤或过滤不严谨 例子: 获取admin表的pass里面的数据 select * from users where id=1 ...
- canvas绘制折线路径动画
最近有读者加我微信咨询这个问题: 其中的效果是一个折线路径动画效果,如下图所示: 要实现以上路径动画,一般可以使用svg的动画功能.或者使用canvas绘制,结合路径数学计算来实现. 如果用canva ...
- .Net Core平台下,添加包的引用
一个程序的开发过程中离不开对程序集(Assembly,将程序集打包好,就成为一个.dll的包文件,它也叫动态链接库(Dynamic Link Library))的依赖,在以前ASP.Net时代,微软 ...