【C++ Primer | 09】容器适配器

一、stack

s.push():     向栈内压入一个成员;
s.pop():      从栈顶弹出一个成员;
s.empty():    如果栈为空返回true,否则返回false;
s.top():      返回栈顶,但不删除成员;
s.size():     返回栈内元素的大小;

 

二、queue 

s.back()         返回队尾元素
s.empty()        如果队列空则返回真
s.front()        返回队首元素
s.pop()          删除队首元素
s.push()         在队尾加入一个元素
s.size()         返回队列中元素的个数
s.emplace(args)  由args构造

 

三、priority_queue

q.empty()             如果队列为空,则返回true,否则返回false  
q.size()              返回队列中元素的个数  
q.pop()               删除队具有最高优先级的元素值,但不返回其值 
q.top()               返回具有最高优先级的元素值,但不删除该元素 
q.push(item)          在基于优先级的适当位置插入新元素

1.  priority_queue允许用户为队列中元素设置优先级,放置元素的时候不是直接放到队尾,而是放置到比它优先级低的元素前面,标准库默认使用<操作符来确定优先级关系。

2.  priority_queue模板类有三个模板参数:元素类型,容器类型,比较算子。其中后两个可以省略,默认容器为vector,默认算子为less,即如果x<y判断为真,则y排到x前面,y先出队。

定义priority_queue对象的示例代码如下

priority_queue<int> q1
priority_queue<pair<int,int>> q2;
priority_queue<int, vector<int>, greater<int>> q3;//定义优先级小的先出队
#include<iostream>
#include<queue>
#include<functional>
using namespace std;int main()
{priority_queue<int, vector<int>, greater<int> > que;for (int i = 0; i < 9; ++i)que.push(i);while (!que.empty()){cout << que.top() << " ";que.pop();}return 0;
}

输出结果:

 

#include<iostream>
#include<queue>
using namespace std;
struct node
{int x, y;friend bool operator < (node a, node b)  //标准库默认使用 < 来确认它们的关系,换成>就不行了哦{return a.y > b.y;   // >表示越小越优先,<表示越大越优先}
};
priority_queue<node> que;int main()
{node v;for (int i = 0; i < 10; i++){v.x = i;v.y = 10 - i;que.push(v);}while (!que.empty()){cout << que.top().x << "," << que.top().y << endl;que.pop();}system("pause");return 0;
}

 输出结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程控制块PCB(进程描述符)

&#xff08;1&#xff09;PCB 每个进程在内核中都有一个进程控制块&#xff08;PCB&#xff09;来维护进程相关的信息&#xff0c;Linux内核的进程控制块是task_struct结构体。grep -r “task_struct” / 可以查找根目录下&#xff0c;包含task_struct的文件文件。或者 find…

【C++ Primer | 19】控制内存分配

1. 测试代码&#xff1a; #include <iostream> #include <new> #include <cstring> #include <cstdlib> using namespace std;void* operator new(size_t size) {cout << "global Override operator new" << endl;if (void* p…

【第15章】虚函数

一、为什么基类中的析构函数要声明为虚析构函数&#xff1f; 直接的讲&#xff0c;C中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说&#xff0c;如果派生类中申请了内存空间&#xff0c;并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数&am…

【C++ Primer | 08】IO库

一、istringstream类 描述&#xff1a;从流中提取数据&#xff0c;支持 >> 操作 这里字符串可以包括多个单词&#xff0c;单词之间使用空格分开 #include <iostream> #include <sstream> using namespace std; int main() {istringstream istr(&quo…

EXEC函数族的一般规律

事实上&#xff0c;只有execve是真正的系统调用&#xff0c;其它五个函数最终都调用execve&#xff0c;所以execve在man手册第2节&#xff0c;其它函数在man手册第3节。这些函数之间的关系如下图所示。

进程间通信的方法

Linux环境下&#xff0c;进程地址空间相互独立&#xff0c;每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到&#xff0c;所以进程和进程之间不能相互访问&#xff0c;要交换数据必须通过内核&#xff0c;在内核中开辟一块缓冲区&#xff0c;进…

pipe函数

#include <unistd.h> int pipe(int pipefd[2]); 作用&#xff1a;创建管道 成功&#xff1a;0&#xff1b;失败&#xff1a;-1&#xff0c;设置errno 函数调用成功返回r/w两个文件描述符。无需open&#xff0c;但需手动close。规定&#xff1a;fd[0] …

mmap内存映射、system V共享内存和Posix共享内存

linux内核支持多种共享内存方式&#xff0c;如mmap内存映射&#xff0c;Posix共享内存&#xff0c;以system V共享内存。当内核空间和用户空间存在大量数据交互时&#xff0c;共享内存映射就成了这种情况下的不二选择。它能够最大限度的降低内核空间和用户空间之间的数据拷贝&a…

匿名映射

通过使用我们发现&#xff0c;使用映射区来完成文件读写操作十分方便&#xff0c;父子进程间通信也较容易。但缺陷是&#xff0c;每次创建映射区一定要依赖一个文件才能实现。通常为了建立映射区要open一个temp文件&#xff0c;创建好了再unlink、close掉&#xff0c;比较麻烦。…

信号的产生和状态

信号的产生&#xff1a;1.按键产生&#xff0c;如&#xff1a;Ctrlc&#xff08;内核向进程发送信号&#xff0c;杀死该进程&#xff09;、Ctrlz、Ctrl\&#xff1b;2.系统调用产生&#xff0c;如&#xff1a;kill、raise、abort&#xff1b;3.软件条件产生&#xff0c;如&…

【C++ Priemr | 15】虚函数常见问题

1. 在成员函数中调用虚函数&#xff1a; #include <iostream> using namespace std; class CBase { public:void func1(){func2();}virtual void func2() { cout << "CBase::func2()" << endl; } }; class CDerived : public CBase { public:virt…

965. 单值二叉树

如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;[1,1,1,1,1,null,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#…

958. 二叉树的完全性检验

给定一个二叉树&#xff0c;确定它是否是一个完全二叉树。 百度百科中对完全二叉树的定义如下&#xff1a; 若设二叉树的深度为 h&#xff0c;除第 h 层外&#xff0c;其它各层 (1&#xff5e;h-1) 的结点数都达到最大个数&#xff0c;第 h 层所有的结点都连续集中在最左边&a…

信号捕捉(signal、sigaction)

信号的基本属性&#xff1a;软中断&#xff0c;由内核发送&#xff0c;内核处理。某个进程通过内核向另一个进程发送信号时&#xff08;引起信号产生的五个因素&#xff09;&#xff0c;另一个进程将会陷入内核进行中断处理&#xff0c;未决信号集中相应信号置1&#xff0c;当递…

可/不可重入函数

一个函数在被调用执行期间&#xff08;尚未调用结束&#xff09;&#xff0c;由于某种时序&#xff08;递归或者处理信号捕捉时等情况&#xff09;又被重复调用&#xff0c;称之为“重入”。根据函数实现的方法可分为“可重入函数”和“不可重入函数”两种。看如下程序。 可以看…

终端的启动流程

在Linux操作系统启动时&#xff0c;首先加载的进程就是init进程&#xff08;ID为1&#xff09;&#xff0c;其余进程都是init进程产生的&#xff08;fork&#xff0c;然后exec金蝉脱壳&#xff09;&#xff0c;因此系统中所有进程都可以看成是init进程的子孙进程。可以通过ps a…

网络终端

虚拟终端或串口终端的数目是有限的&#xff0c;虚拟终端&#xff08;字符控制终端&#xff09;一般就是/dev/tty1∼/dev/tty6六个&#xff0c;串口终端的数目也不超过串口的数目。然而网络终端或图形终端窗口的数目却是不受限制的&#xff0c;这是通过伪终端&#xff08;Pseudo…

线程的概念

线程&#xff08;LWP&#xff0c;light weight process&#xff09;是轻量级的进程&#xff0c;本质仍是进程&#xff08;在类unix环境下&#xff09;。进程有独立地址空间&#xff0c;拥有PCB&#xff1b;线程也有PCB&#xff0c;但没有独立的地址空间&#xff08;共享&#x…

C指针深度解析

&#xff08;1&#xff09;指针的概念 指针是一种数据类型&#xff0c;而内存地址是这种数据类型具体的值&#xff08;注意区分两者的概念&#xff09;。先说一下什么是内存地址&#xff1a;假设CPU的寻址方式是以字节寻址的&#xff0c;即每一个字节对应一个地址编号&#xf…

C++设计模式之策略模式(Strategy)

Strategy策略模式作用&#xff1a;定义了算法家族&#xff0c;分别封装起来&#xff0c;让他们之间可以互相替换&#xff0c;此模式让算法的变化&#xff0c;不会影响到使用算法的客户。 UML图&#xff1a; 代码实现 #include <iostream> using namespace std;class St…