• 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. 获取全局描述符表GDT的内容

    /stdfx.h文件 //Ring0环的程序 //测试环境VS2005 #ifndef _WIN32_WINNT // Allow use of features specific to Window ...

  2. 【转】如何用MTR诊断网络问题

    MTR 是一个强大的网络诊断工具,管理员能够用它诊断和隔离网络错误,并向上游提供商提供有关网络状态的有用报告.MTR 通过更大的采样来跟踪路由,就像 traceroute + ping 命令的组合.本 ...

  3. 【原创】ansible-playbook 详解

    YAML的语法和其他高阶语言类似并且可以简单表达清单.散列表.标量等数据结构.(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对) YAML文件扩展名通常为.yaml或者.yml.下面 ...

  4. hdu 1867 求两个串的"和"最小 ,KMP

    题意:       给你两个字符串,让你求str1+str2,就是把1的后面和2的前面重叠的地方只显示一遍就行了 abc + bcd = abcd,要求和的长度最小,和最小的前提下求字典序最小,还有就 ...

  5. CVE-2013-1347:从入门到放弃之调试分析令人崩溃的 Microsoft IE CGenericElement UAF 漏洞

    0x01 2013 年 "水坑" APT 攻击事件 在 2013 年 5 月,美国的劳工部网站被黑,利用的正是 CVE-2013-1347 这个漏洞,在当时导致大量使用 IE8 访 ...

  6. Linux提权—脏牛漏洞(CVE-2016-5195)

    目录 脏牛漏洞 exp1复现: exp2复现: 脏牛漏洞 脏牛漏洞,又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞.Linux ...

  7. HTTP1.0,1.1,2.0,HTTPS

    HTTP1.0/1.1/2.0/HTTPS HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接收HTML页 ...

  8. HashMap方法源码分析

    本文将分析put(),resize(),get()和remove()方法的源码 putval()方法 大致步骤:计算key的hash值:根据hash值计算数组下标:判断下标处是否有节点,无节点则直接插 ...

  9. C++ primer plus读书笔记——第9章 内存模型和名称空间

    第9章 内存模型和名称空间 1. 头文件常包含的内容: 函数原型. 使用#define或const定义的符号常量. 结构声明. 类声明. 模板声明. 内联函数. 2. 如果文件名被包含在尖括号中,则C ...

  10. 【近取 Key】Alpha - v1.0 版本发布说明

    功能与特性 Alpha 版本虽然为本软件的第一代版本,但已基本覆盖了用户个人使用时的主要功能.除登陆注册与后台管理外,下文将分版块详细介绍面向用户的主要功能特性. 『产品主页』 潜在应用场景 场景 0 ...