• 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常见用法详解的更多相关文章

  1. C++标准模板库(STL)——set常见用法详解

    set的定义 set<typename> name; typename可以是任何基本类型,如int.double.char.结构体等,也可以是STL标准容器,如vector.set.que ...

  2. C++标准模板库(STL)——queue常见用法详解

    queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...

  3. C++标准模板库(STL)——map常见用法详解

    map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...

  4. STL vector常见用法详解

    <算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...

  5. STL priority_queue 常见用法详解

    <算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...

  6. STL set 常见用法详解

    <算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: ...

  7. STL pair 常见用法详解

    <算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...

  8. STL stack 常见用法详解

    <算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...

  9. STL queue 常见用法详解

    <算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...

随机推荐

  1. Windows本地安全策略

    目录 本地安全策略 密码策略 账户策略 审核策略 用户权限分配 安全选项 本地安全策略 安全策略是影响计算机安全性的安全设置的组合.可以利用本地安全策略来编辑本地计算机上的帐户 系统安全策略包括下面的 ...

  2. Windows 签名伪造工具的使用,Python,签名

    #!/usr/bin/env python3 # LICENSE: BSD-3 # Copyright: Josh Pitts @midnite_runr import sys import stru ...

  3. XCTF-unfinish

    unfinish 之前做过这个题,这是之前写的WP:链接

  4. 记录数据库被攻击.md

    昨天的数据库还是正常的,早上想连接mysql,一直报错1045,最后才发现数据库被攻击了 navicat连接mysql疯狂报错1045 因为1045的报错,一般都是密码设置的问题,但是我怎么修改也没有 ...

  5. Spring Cloud 升级之路 - 2020.0.x - 4. 使用 Eureka 作为注册中心

    Eureka 目前的状态:Eureka 目前 1.x 版本还在更新,但是应该不会更新新的功能了,只是对现有功能进行维护,升级并兼容所需的依赖. Eureka 2.x 已经胎死腹中了.但是,这也不代表 ...

  6. 一次 Go 程序 out of memory 排查及反思

    前言 最近在搞数据导出模块,在测试大文件下载的过程中,报了 Out of memory (OOM) 错误,因为之前没有遇到过这类问题,导致此次排查问题花费了大半天,也走了不少弯路,特此复盘记录. 现象 ...

  7. Python协程与JavaScript协程的对比

    前言 以前没怎么接触前端对JavaScript 的异步操作不了解,现在有了点了解一查,发现 python 和 JavaScript 的协程发展史简直就是一毛一样! 这里大致做下横向对比和总结,便于对这 ...

  8. 【死磕JVM】用Arthas排查JVM内存 真爽!我从小用到大

    Arthas是啥 当我们系统遇到JVM或者内存溢出等问题的时候,如何对我们的程序进行有效的监控和排查,就发现了几个比较常用的工具,比如JDK自带的 jconsole.jvisualvm还有一个最好用的 ...

  9. 拦截器(Interceptor)与过滤器(Filter)

    目录 用户的普通Http请求执行顺序 过滤器.拦截器添加后的执行顺序 拦截器(Interceptor)的基本定义 拦截器(Interceptor)必须实现的三个方法 单个拦截器(Interceptor ...

  10. JWT 基本使用

    JWT 基本使用 在上一节中 session 共享功能使用 redis 进行存储,用户量激增时会导致 redis 崩溃,而 JWT 不依赖服务器,能够避免这个问题. 1.传统 session 1.1. ...