ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++STL标准库学习笔记(十二)容器适配器

2022-01-26 17:01:00  阅读:198  来源: 互联网

标签:容器 STL 适配器 C++ queue vector push stack


前言:

  在这个笔记中,我把大多数代码都加了注释,我的一些想法和注解用蓝色字体标记了出来,重点和需要关注的地方用红色字体标记了出来。

  在这一篇文章中,我们主要对STL中的容器适配器进行简单的介绍。

正文:

1. stack

  stack是后进先出的数据结构,只能插入,删除,访问栈顶的元素。

  可以用vector,list,deque来实现,在缺省情况下(缺省即默认),用deque实现(也就是说stack在你不特别定义它是其他的容器来实现时,默认是用deque来实现的,下面讲到的其他容器适配器也是这样)。用vector和deuqe实现,比用list实现性能好。

  template<class T, class Cont = deque<T>>

  class stack

  {

  .......

  };

  stack上可以进行以下操作:

  push 插入元素

  pop 弹出元素

  top 返回栈顶元素的引用

2. queue

  和stack基本类似,可以用list和deque实现。缺省情况下用deque实现。

  template<class T, class Cont = deque<T>>

  class queue

  {

  .......

  };

  同样也有push,pop,top函数。(这些东西数据结构都有讲)

  但是push发生在队尾;top发生在队头。先进先出。

  有back成员函数可以返回队尾元素的引用

3. priority_queue

  template<class T, class Cont = deque<T>,class Compare = less<T>>

  class priority_queue

  {

  .......

  };

 

  和queue类似,可以用vector和deque实现。缺省情况下用vector实现。

  priority_queue通常用堆排序技术实现,保证最大的元素总是在最前面。即执行pop操作时,删除的是最大的元素;执行top操作时,返回的是最大元素的引用。(这个引用是const的,不能修改)默认的元素比较器是less<T>(就是默认从小到大排序嘛,用“<”来排序)(这不就是队列版的multiset嘛)

  push,pop的时间复杂度O(logn)

  top()时间复杂度O(1)

  样例:

 1 #include<queue>
 2 #include<iostream>
 3 using namespace std;
 4 int main(int argc, char const *argv[])
 5 {
 6     priority_queue<double> pq1;
 7     pq1.push(3.2);
 8     pq1.push(9.8);
 9     pq1.push(9.8);
10     pq1.push(5.4);
11     while (!pq1.empty())
12     {
13         cout<<pq1.top()<<" ";
14         pq1.pop();
15     }//输出:9.8 9.8 5.4 3.2
16     cout<<endl;
17     priority_queue<double,vector<double>,greater<double>> pq2;
18     //虽然默认是用vector来实现的,这里再用vector也没问题,
19     //这里是由于要用后面的比较的方法,就要把它给出来
20     pq2.push(3.2);
21     pq2.push(9.8);
22     pq2.push(9.8);
23     pq2.push(5.4);
24     while (!pq2.empty())
25     {
26         cout<<pq2.top()<<" ";
27         pq2.pop();
28     }//输出:3.2 5.4 9.8 9.8
29     
30     return 0;
31 }

4. 容器适配器的元素个数

  stack,queue,priority_queue都有

  empty()成员函数用于判断适配器是否为空

  size()成员函数返回适配器中元素个数

 

后记:

  学之前不理解“容器适配器”是个啥玩意,学完之后突然理解,容器适配器这五个字拆开,“容器的适配器”,容器有我们之前最知道的deque,vector,list那些,而stack,queue,priority_queue这些容器适配器都通过这几个容器实现,也可以称作这几个适配于容器,哎呀,感觉越讲越乱了,反正就是适配器可以用容器来实现就对了。8说了,下篇笔记见。

标签:容器,STL,适配器,C++,queue,vector,push,stack
来源: https://www.cnblogs.com/AwakeFantasy/p/15847280.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有