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 ...
随机推荐
- POJ2446 二分匹配
题意: 给你一个n*m的格子,问你能不能用1*2的格子把他铺满,有的位置是不能被铺的. 思路: 水题,直接把个相邻的并且都是可以铺的点连一条边然后匹配一遍就行了,提醒一个地方,就 ...
- xposed结合Zygote分析
android中zygote相信大家都很熟悉,它执行的函数是app_main.cpp,而xposed主要实现的就是替换app_main.cpp.所以在分析xposed时有必要来认识下zygote.好了 ...
- 表单模块 layui-form
使用 layui针对各种表单元素做了比较全面的Ui支持,在Ui渲染只要求一点.,在表单体所在父元素加上class="layui-form" 监听事件 提交按钮监听,注意需要加·la ...
- 小技巧!CSS 提取图片主题色功能探索
本文将介绍一种利用 CSS 获取图片主题色的小技巧.一起看看~ 背景 起因是微信技术群里有个同学发问,有什么方法能够获取图片的主色呢?有一张图片,获取他的主色调: 利用获取到的这个颜色值,来实现类似这 ...
- UML类关系:依赖,关联,聚合和组合
UML图示例:(可使用StartUML来画图,小巧^_^) http://www.blogjava.net/lukangping/archive/2010/08/01/327693.html 聚合:表 ...
- [DB] mysql windows 安装
参考 mysql安装 https://www.cnblogs.com/zhangkanghui/p/9613844.html navicat for mysql 中文破解版(无需激活码) https: ...
- [刷题] PTA 03-树3 Tree Traversals Again
用栈实现树遍历 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXSIZE 30 4 5 int Pre[MAXSIZ ...
- GCC链接时库顺序问题
GCC或G++在编译链接时,如果命令行中含有库,则要特别注意了.根据<C专家编程>5.3节中的提示,GCC在链接时对命令行时的处理顺序是从左到右.证据是GCC的MAN: -l librar ...
- https://www.jqhtml.com/30047.html strace + 命令: 这条命令十分强大,可以定位你程序到底是哪个地方出了问题
https://www.jqhtml.com/30047.html 我的Linux手册 服务器 浏览数:72 2019-1-30 原文链接 基础安装 # CentOS sudo yum install ...
- RHEL sosreport
RHEL sosreport简介 sosreport对很多RedHat爱好者来说应该并不陌生! 它是一款在RedHat Linux下帮你收集系统信息打成一个tar包的工具,你可以将这个tar包发给供应 ...