vector容器的简单应用,我们可以用vector维护一个有序数组,每次对要插入的数用upper_bound或者lower_bound来
为这个数找一个应该插入到vector的位置。另外再找一个数组来维护插入数的顺序,来面对pop操作
在从小到大的排序数组中,
lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,
找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,
找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
在从大到小的排序数组中,重载lower_bound()和upper_bound()
lower_bound( begin,end,num,greater<type>() ):从数组的begin位置到end-1位置二分查找第一个小于或等于num的数字,
找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
upper_bound( begin,end,num,greater<type>() ):从数组的begin位置到end-1位置二分查找第一个小于num的数字,
找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
void push_back(const T& x):向量尾部增加一个元素X
iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
 
构造函数

vector():创建一个空vector

vector(int nSize):创建一个vector,元素个数为nSize

vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t

  1. 1 //int型vector,包含3个元素且每个元素都是9
  2. 2 vector<int> vecIntB(3,9);

vector(const vector&):复制构造函数

vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中

 
vector容器的查找
find(r.begin(),r.end(),要查找的值),注意这个find相当于一个“类函数”,即不需要vector.find()
返回值可赋值给迭代器(比如it),it-=r.begin()会得到一个下标,这个下标就是要查找的值在vector中的位置(从0开始)
如果没有找到会返回r.end()(r.end()位置的值是一个随机数)。所以可以与r.end()比较来判断这个值存不存在
 
vector元素的删除
iterator erase(iterator it):删除向量中迭代器指向元素
 
遍历vector
  1. 1 #include<iostream>
  2. 2 #include<queue>
  3. 3 #include<vector>
  4. 4 #include<string.h>
  5. 5 #include<stdio.h>
  6. 6 #include<algorithm>
  7. 7 using namespace std;
  8. 8 typedef long long ll;
  9. 9 const int maxn=5e4+10;
  10. 10 const int N=1e4+10;
  11. 11 int main()
  12. 12 {
  13. 13 vector<int>r;
  14. 14 vector<int>::iterator it;
  15. 15 r.push_back(1);
  16. 16 r.push_back(2);
  17. 17 r.push_back(3);
  18. 18 for(it=r.begin();it!=r.end();it++)
  19. 19 cout<<(*it)<<endl;
  20. 20 }
  21. 21 /*
  22. 22 结果:
  23. 23 1
  24. 24 2
  25. 25 3
  26. 26
  27. 27 */
 
更多vector操作见:https://blog.csdn.net/qq_31858735/article/details/82623110
 
 
本题代码:
  1. 1 /*
  2. 2 vector容器的简单应用,我们可以用vector维护一个有序数组,每次对要插入的数用upper_bound或者lower_bound来
  3. 3 为这个数找一个应该插入到vector的位置。另外再找一个数组来维护插入数的顺序,来面对pop操作
  4. 4
  5. 5
  6. 6 在从小到大的排序数组中,
  7. 7 lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,
  8. 8 找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
  9. 9
  10. 10 upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,
  11. 11 找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
  12. 12
  13. 13
  14. 14 在从大到小的排序数组中,重载lower_bound()和upper_bound()
  15. 15 lower_bound( begin,end,num,greater<type>() ):从数组的begin位置到end-1位置二分查找第一个小于或等于num的数字,
  16. 16 找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
  17. 17
  18. 18 upper_bound( begin,end,num,greater<type>() ):从数组的begin位置到end-1位置二分查找第一个小于num的数字,
  19. 19 找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
  20. 20
  21. 21
  22. 22
  23. 23 void push_back(const T& x):向量尾部增加一个元素X
  24. 24 iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
  25. 25 iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
  26. 26 iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
  27. 27 更多vector操作见:https://blog.csdn.net/qq_31858735/article/details/82623110
  28. 28 */
  29. 29 #include<stdio.h>
  30. 30 #include<string.h>
  31. 31 #include<iostream>
  32. 32 #include<algorithm>
  33. 33 #include<map>
  34. 34 #include<queue>
  35. 35 #include<vector>
  36. 36 using namespace std;
  37. 37 const int maxn=1005;
  38. 38 const int N=1e4+10;
  39. 39 int main()
  40. 40 {
  41. 41 int n;
  42. 42 vector<int> v1,v;
  43. 43 scanf("%d",&n);
  44. 44 vector<int>::iterator it;
  45. 45 while(n--)
  46. 46 {
  47. 47 char ch[15];
  48. 48 scanf("%s",ch);
  49. 49 string s = ch;
  50. 50 if(s == "Push")
  51. 51 {
  52. 52 int temp;
  53. 53 scanf("%d",&temp);
  54. 54 v1.push_back(temp);
  55. 55 it = lower_bound(v.begin(),v.end(),temp); //获取大于等于temp这个值位置
  56. 56 v.insert(it,temp); //vector插入到it的前面
  57. 57 }
  58. 58 else if(s == "Pop")
  59. 59 {
  60. 60 if(v1.size() == 0)
  61. 61 printf("Invalid\n");
  62. 62 else
  63. 63 {
  64. 64 it = lower_bound(v.begin(),v.end(),v1[v1.size()-1]);
  65. 65 v.erase(it);
  66. 66 printf("%d\n",v1[v1.size()-1]);
  67. 67 v1.pop_back();
  68. 68 }
  69. 69 }
  70. 70 else if(s == "PeekMedian")
  71. 71 {
  72. 72 if(v1.size() == 0)
  73. 73 {
  74. 74 printf("Invalid\n");
  75. 75 continue;
  76. 76 }
  77. 77 if(v.size() % 2 == 0)
  78. 78 printf("%d\n",v[v.size()/2-1]);
  79. 79 else
  80. 80 printf("%d\n",v[v.size()/2]);
  81. 81 }
  82. 82 }
  83. 83 return 0;
  84. 84 }

L3-002 特殊堆栈 (30分) vector容器的模拟、vector容器的一些用法的更多相关文章

  1. PAT 甲级 1053 Path of Equal Weight (30 分)(dfs,vector内元素排序,有一小坑点)

    1053 Path of Equal Weight (30 分)   Given a non-empty tree with root R, and with weight W​i​​ assigne ...

  2. 1127 ZigZagging on a Tree (30 分)

    1127 ZigZagging on a Tree (30 分) Suppose that all the keys in a binary tree are distinct positive in ...

  3. PTA 07-图5 Saving James Bond - Hard Version (30分)

    07-图5 Saving James Bond - Hard Version   (30分) This time let us consider the situation in the movie ...

  4. L3-015 球队“食物链” (30 分)

    L3-015 球队“食物链” (30 分)   某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结果已经尘埃落定.此时,联赛主席 ...

  5. PAT A1127 ZigZagging on a Tree (30 分)——二叉树,建树,层序遍历

    Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...

  6. PTA 7-2 二叉搜索树的结构(30 分)

    7-2 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大 ...

  7. 顺序容器----顺序容器操作,vector对象如何增长,额外的string操作,容器适配器

    一.顺序容器操作 1.向顺序容器添加元素 向顺序容器(array除外)添加元素的操作: 操作 说明 c.push_back(t) 在c的尾部创建一个值为t的元素.返回void c.emplace_ba ...

  8. 1111 Online Map (30 分)

    1111. Online Map (30)Input our current position and a destination, an online map can recommend sever ...

  9. stack堆栈容器、queue队列容器和priority_queue优先队列容器(常用的方法对比与总结)

    stack堆栈是一个后进先出的线性表,插入和删除元素都在表的一端进行. stack堆栈的使用方法: 采用push()方法将元素入栈: 采用pop()方法将元素出栈: 采用top()方法访问栈顶元素: ...

随机推荐

  1. MySQL查询优化之 index 索引的分类和使用

    索引的分类 主键索引 (PRIMARY KEY) 唯一的标识符, 主键不可重复, 只能有一列作为主键 唯一索引 (Unique KEY) 避免重复的列出现, 唯一索引可以重复, 多个列都可以标识为唯一 ...

  2. 创建一个简单MyBatis程序

    文章目录 MyBatis基础 MyBatis 简介 创建一个MyBatis程序 1. 创建Java项目 2. 加载MyBatis包 3. 编写POJO类和映射文件 4.创建mybatis-config ...

  3. XSS - Labs 靶场笔记(下)

    Less - 11: 1.观察界面和源代码可知,依旧是隐藏表单 2.突破点是 $str11=$_SERVER['HTTP_REFERER']; (本题为HTTP头REFERER注入) 3.因此构造pa ...

  4. 如何在windows开机画面里隐藏用户

    当开机的时候都会在欢迎屏幕中显示一个账户或者多个已经建立的账户,通常还会显示登录的用户名,我们可以通过修改注册表实现把某个用户隐藏,具体方法如下:http://hi.baidu.com/liminsu ...

  5. SparkStreaming和Kafka基于Direct Approach如何管理offset实现exactly once

    在之前的文章<解析SparkStreaming和Kafka集成的两种方式>中已详细介绍SparkStreaming和Kafka集成主要有Receiver based Approach和Di ...

  6. Windows下的python虚拟环境设置

    Windows下的python虚拟环境设置: virtualenv 在python开发中,我们可能会遇到一种情况:就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲 ...

  7. CentOS对接GlusterFS

    存储节点部署示例环境,仅供参考 主机名 IP 系统 gfs01 10.10.10.13 CentOS 7.4.1708 gfs02 10.10.10.14 CentOS 7.4.1708 一.Glus ...

  8. ROS教程(一):ROS安装教程(详细图文)

    ros教程:ros安装 目录 前言 一.版本选择 二.开始安装 2.1 软件中心配置 2.2 添加源 2.3 安装 三.验证ROS 前言 关于ROS(Robot OS 机器人操作系统),估计看这个教程 ...

  9. jvm源码解析java对象头

    认真学习过java的同学应该都知道,java对象由三个部分组成:对象头,实例数据,对齐填充,这三大部分扛起了java的大旗对象,实例数据其实就是我们对象中的数据,对齐填充是由于为了规则分配内存空间,j ...

  10. Correct the classpath of your application so that it contains a single, compatible version of org.thymeleaf.spring5.SpringTemplateEngine

    Error starting ApplicationContext. To display the conditions report re-run your application with 'de ...