太仓建设工程网站,本机号码一键登录,pc网站 手机网站 微信公众平台,自学网课程设置文章目录 queuequeue的介绍queue的使用 priority_queuepriority_queue介绍priority_queue使用 queue
queue的介绍 队列是一种容器适配器#xff0c;专门用于上下文先进先出的操作中。队列的特性是先进先出#xff0c;从容器的一端插入#xff0c;另一端提取元素。 队列… 文章目录 queuequeue的介绍queue的使用 priority_queuepriority_queue介绍priority_queue使用 queue
queue的介绍 队列是一种容器适配器专门用于上下文先进先出的操作中。队列的特性是先进先出从容器的一端插入另一端提取元素。 队列作为容器适配器实现容器适配器即将特定容器类封装作为其底层容器类queue提供一组特定的成员函数来访问其元素。元素从队尾入队列从队头出队列。 底层容器可以是标准容器类模板之一也可以是其他专门设计的容器类。该底层容器应至少支持以下操作empty检测队列是否为空、size返回队列中有效元素的个数、front返回队头元素的引用、back返回队尾元素的引用、push_back在队列尾部插入元素、pop_front在队列头部删除元素。 标准容器类deque和list满足了这些要求。默认请情况下如果没有为queue实例化指定底层容器类则默认使用标准容器deque。
queue的使用
函数声明接口说明queue()构造空的队列empty()检测队列是否为空为空就返回true否则就返回falsesize()返回队列中有效元素的个数front()返回队头元素的引用back()返回队尾元素的引用push()在队尾将元素val插入队列pop()将队头元素弹出队列
int main()
{dequeint mydeck(3, 100);listint mylist(2, 200);queueint first;queueint second(mydeck);queueint, listint third;queueint, listint fourth(mylist);return 0;
}int main()
{queueint myqueue;int sum(0);cout myqueue.empty() endl;for (int i 1; i 10; i)myqueue.push(i);cout myqueue.empty() endl;while (!myqueue.empty()){sum myqueue.front();myqueue.pop();}cout total: sum endl;return 0;
}int main()
{queueint myints;cout 0.size: myints.size() endl;for (int i 0; i 5; i)myints.push(i);cout 1.size: myints.size() endl;myints.pop();cout 2.size: myints.size() endl;return 0;
}int main()
{queueint myqueue;myqueue.push(10);myqueue.push(20);myqueue.front() - myqueue.back();cout myqueue.front(): myqueue.front() endl;myqueue.back() myqueue.front();cout myqueue.back(): myqueue.back() endl;return 0;
}在C11中stack的成员函数也新增了emplace和swap。
priority_queue
priority_queue介绍 优先队列是一种容器适配器根绝严格的弱排序标准它的第一个元素总是它所包含的元素中最大的。可以当做堆来理解实际上和堆基本一致。在堆中可以随时插入元素并且智能检索最大的堆元素优先队列中位于顶部的元素。 优先队列被实现为容器适配器容器适配器即将特定容器类封装作为其底层容器类。priority_queue提供一组特定的成员函数来访问其元素。元素从特定容器的尾部被抛出其称为有限队列的顶部。 底层容器可以是任何标准容器类模板也可以是其他特定设计的容器类。容器应该可以通过迭代器访问并支持以下操作empty检测容器是否为空、size返回容器中有效元素的个数、front返回容器中第一个元素的引用、push_back在容器尾部插入元素、pop_back删除容器尾部的元素。需要注意的是这些操作是priority_queue必须具备的并非是只能有这些操作。 标准容器类vector和deque满足这些需求。默认情况下如果没有为特定的priority_queue类实例化指定容器类则使用vector。 需要支持随机访问迭代器以便始终在内部保持堆结构。容器适配器通过在需要时自动调用算法函数make_heap、push_heap和pop_heap来自动完成此操作。 优先级队列默认使用vector作为其底层存储数据的容器在vector上又使用了堆算法将vector中元素构造成堆的结构因此priority_queue就是堆所有需要用到堆的地方都可以考虑使用priority_queue。默认情况下priority_queue是大堆。
priority_queue使用
函数声明接口说明priority_queue()/priority_queue(first, last)构造一个优先级队列empty()检测优先级队列是否为空为空就返回true否则就返回falsesize()返回优先队列中有效元素的个数top()返回优先级队列中最大最小元素即堆顶元素push()在优先级队列中插入元素pop()删除优先级队列中的最大最小元素即堆顶元素
class mycomparison
{bool reverse;
public:mycomparison(const bool revparam false){reverse revparam;}bool operator() (const int lhs, const int rhs) const{if (reverse)return (lhs rhs);elsereturn (lhs rhs);}
};int main()
{int myints[] { 10, 60, 50, 20 };priority_queueint first;priority_queueint second(myints, myints 4);priority_queueint, vectorint, greaterint third(myints, myints 4);typedef priority_queueint, vectorint, mycomparison mypq_type;mypq_type fourth;mypq_type fifth(mycomparison(true));return 0;
}int main()
{priority_queueint mypq;int sum(0);for (int i 0; i 10; i)mypq.push(i);cout mypq size: mypq.size() endl;cout mypq top: mypq.top() endl;while (!mypq.empty()){sum mypq.top();mypq.pop();}cout total: sum endl;return 0;
}