• 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. hdu 1814 字典序最小的2sat(暴力深搜)

    题意:      题意就是最基础的2sat,关系只有矛盾关系,然后二选一,关键是这个题目是输出字典序最小的那组解. 思路:      输出字典序最小,用强连通那个实现不了(起码没看到有人实现),其实我 ...

  2. android apk壳

    壳对于有过pc端加解密经验的同学来说并不陌生,android世界中的壳也是相同的存在.看下图(exe = dex):    概念清楚罗,我们就说下:壳最本质的功能就是实现加载器.你看加壳后,系统是先执 ...

  3. POJ1042 贪心钓鱼

    题意:       你有H小时(H*12个单位)时间去用,有n个鱼池在一条直线上,一开始你在1的位置,可以选择在某些鱼池上钓鱼,但是如果持续在一个鱼池上钓鱼钓鱼速度回成线性减少,初始每个时间单位钓fi ...

  4. HDU - 3347 Calculate the expression — 模拟 + map存变量

    传送门 题意:从输入开始,1.输入样例数:2.然后输入一组样例中的行数n:3.前n-1行为定义变量(之间使用空格隔开),只需要map存进去就可以了(这里有覆盖的情况,故使用mp["s&quo ...

  5. matlab添加当前路径下的所有子目录

    % 添加当前路径下的所有子目录addpath(genpath(pwd));

  6. apiAutoTest:基于mitmproxy实现接口录制

    目录 apiAutoTest 目前功能 重大更新(个人认为) 本次更新 契机 根本 如何录制 录制的用例 执行录制的用例 执行结果 实现源码 参考资料 apiAutoTest 先软文介绍下:apiAu ...

  7. xxl-job的一些感悟与规范

    后台计划任务设计思路: 日志埋点处理,便于prd排查问题 2种主动job搭配规范(正向job.反查job) 1种消息接收的处理规范,重试机制,返回状态 job开关维度 数据流图 线上暗job-便捷性- ...

  8. 分析Red Hat sosreport输出的方法

    分析Red Hat sosreport输出的方法? Modified on: Fri, 31 May 2019 20:20:02 +0800 有一段时间(自EL 4.6以来),Red Hat嵌入了sy ...

  9. Linux 操作系统(四)用户组管理&进程管理&任务调度

    以下实例均在Centos7下验证 Centos7 查看命令帮助 man xxx 用户组管理 useradd useradd user1 password user1 cat /etc/passwd # ...

  10. linux进阶之子网划分

    一.定义 当我们对一个网络进行子网划分时,基本上就是将它分成小的网络.比如,当一组IP地址指定给一个公司时,公司可能将该网络"分割成"小的网络,每个部门一个.这样,技术部门和管理部 ...