c++如何定义一个队列的定义

c++顺序队列_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
c++顺序队列
上传于||文档简介
&&c​+​+​顺​序​队​列
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢c++实现一个队列的问题1)加入一个元素到队列(入队IN);2)将一个元素移出队列(出队OUT);3)判断一个元素是否在队列中;4)将队列清空。(可以永久保留队列内容)
includemultiset void push(int p){s.insert(p);}void pop(int p){s.erase(s.find(p));}bool pend(int p){return s.count(p);}void clear(){s.clear();}int main(){}
为您推荐:
扫描下载二维码C++ 优先级队列(priority_queue)
C++ 优先级队列(priority_queue)
围观1325次
C++ 优先级队列(priority_queue)
  优先级队列顾名思义是根据元素的优先级被读取,接口和queues非常相近。程序员可以通过template参数指定一个排序准则。缺省的排序准则是利用operator& 形成降序排列,那么所谓&下一个元素&就是&数值最大的元素&。如果同时存在若干个数值最大的元素,无法确知究竟哪一个会入选。
头文件:&queue&
在文件 &queue& 中,class priority_queue 定义如下:
namespace std {
&&& template & class T ,
&&&&&&&&&& class Container = vector&T& ,
&&&&&&&&&& class Compare = less &typename Container::value_type& &
&&& class priority_
由于priority queue需要用到STL heap算法,所以其内部容器必须支持随机存取迭代器。例如你可以使用deque来容纳元素:
std::priority_queue& float, std::deque&float& &
push() 将一个元素置于priority queue中
top()& 返回priority queue中的&下一个元素&
pop() 从priority queue 中移除一个元素
注意:如果priority queue 内没有元素,执行top()和pop()会导致未定义的行为,应该先采用size()或empty()来检验容器是否为空。
// 使用VS2008 和 code::blocks 10.05调试通过
#include &iostream&
#include &queue&
int main()
priority_queue&float&
// insert three elements into the priority queue
q.push (66.6);
q.push (22.2);
q.push (44.4);
// read and print two elements
cout && q.top () && ' ';
cout && q.top () &&
// insert three more elements
q.push (11.1);
q.push (55.5);
q.push (33.3);
// skip one element
// pop and print remaining elements
while (!q.empty ()) {
cout && q.top () && ' ';
参考资料 《C++标准程序库》侯捷 孟岩译
转自:/chinazhangjie/archive//1865653.html
您可能还会对这些文章感兴趣!c++多线程编程中队列的使用问题
[问题点数:100分,结帖人ziyue007]
c++多线程编程中队列的使用问题
[问题点数:100分,结帖人ziyue007]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本帖子已过去太久远了,不再提供回复功能。2、运行结果
1 #include &stdio.h&
2 #include &string.h&
4 template &typename T& class ClsQueueData
ClsQueueData * __m_
protected :
void _clear();
ClsQueueData(T * pData);
ClsQueueData();
~ClsQueueData();
void destroy();
ClsQueueData * getNext();
int setNext(ClsQueueData * p);
T * getData();
int setData(T * pData);
26 template &typename T& ClsQueueData&T&::ClsQueueData()
__m_next = NULL;
__m_Data = NULL;
32 template &typename T& ClsQueueData&T&::ClsQueueData(T * p)
__m_next = NULL;
__m_Data =
38 template &typename T& ClsQueueData&T&::~ClsQueueData()
43 template &typename T& ClsQueueData&T& * ClsQueueData&T&::getNext()
return __m_
48 template &typename T& int ClsQueueData&T&::setNext(ClsQueueData * p)
if(NULL == p)
return -1;
p-&__m_next = NULL;
__m_next =
60 template &typename T& T * ClsQueueData&T&::getData()
return __m_D
65 template &typename T& int ClsQueueData&T&::setData(T * pData)
__m_Data = pD
71 template &typename T& void ClsQueueData&T&::_clear()
if(NULL != __m_Data)
delete __m_D
__m_next = NULL;
80 template &typename T& void ClsQueueData&T&::destroy()
__m_Data = NULL;
__m_next = NULL;
delete this;
87 template &typename T& class ClsQueue
ClsQueueData&T& * __m_
ClsQueueData&T& * __m_
ClsQueue();
~ClsQueue();
push(T * pData);
pop (T ** pData);
void clear();
size_t getSize();
104 template &typename T& ClsQueue&T&::ClsQueue()
__m_head = NULL;
__m_tail = NULL;
__m_size = 0;
111 template &typename T& ClsQueue&T&::~ClsQueue()
__m_size = 0;
ClsQueueData&T& * p = __m_
while(p != NULL)
ClsQueueData&T& * x =
p = p-&getNext();
__m_head = NULL;
__m_tail = NULL;
125 template &typename T& int
ClsQueue&T&::push(T * pData)
ClsQueueData&T& * pElm = new ClsQueueData&T&;
if(NULL == pElm)
return -1;
pElm-&setData(pData);
if(NULL == __m_head)
__m_head = pE
__m_tail = pE
else if(NULL == __m_tail)
ClsQueueData&T& * p = __m_
while(p-&getNext() != NULL)
p = p-&getNext();
__m_tail =
__m_tail-&setNext(pElm);
__m_tail = pE
__m_size ++;
157 template &typename T& int
ClsQueue&T&::pop (T ** pData)
if(NULL == __m_head || NULL == pData)
return -1;
ClsQueueData&T& * p = __m_
if(__m_head == __m_tail)
__m_head = __m_tail = NULL;
__m_head = __m_head-&getNext();
__m_size --;
*pData = p-&getData();
p-&destroy();
180 template &typename T& void ClsQueue&T&::clear()
ClsQueueData&T& * p = __m_
while(p != NULL)
ClsQueueData&T& * x =
p = p-&getNext();
__m_head = __m_tail = NULL;
__m_size = 0;
193 template &typename T& size_t ClsQueue&T&::getSize()
return __m_
198 int main()
ClsQueue&int& objQ;
int i = 0;
for(i = 0; i & 10; i++)
int * x = new int;
objQ.push(x);
printf("line : [%d]; queue size : [%u]\n", __LINE__, objQ.getSize());
for(i = 0; i & 11; i++)
int * x = NULL;
int iRet = objQ.pop(&x);
printf("line : [%d]; queue size : [%u]\n", __LINE__, objQ.getSize());
if(-1 == iRet)
printf("get data faild\n");
if(i == *x)
printf("RIGHT\n");
printf("WRONG\n");
for(i = 0; i & 10; i++)
int * x = new int;
objQ.push(x);
printf("line : [%d]; queue size : [%u]\n", __LINE__, objQ.getSize());
objQ.clear();
printf("line : [%d]; queue size : [%u]\n", __LINE__, objQ.getSize());
2、运行结果
  2.1)编译
-c -o queue.o queue.cpp
g++ -g -o queue queue.o
  2.2)运行结果
line : [207]; queue size : [1]
line : [207]; queue size : [2]
line : [207]; queue size : [3]
line : [207]; queue size : [4]
line : [207]; queue size : [5]
line : [207]; queue size : [6]
line : [207]; queue size : [7]
line : [207]; queue size : [8]
line : [207]; queue size : [9]
line : [207]; queue size : [10]
line : [213]; queue size : [9]
line : [213]; queue size : [8]
line : [213]; queue size : [7]
line : [213]; queue size : [6]
line : [213]; queue size : [5]
line : [213]; queue size : [4]
line : [213]; queue size : [3]
line : [213]; queue size : [2]
line : [213]; queue size : [1]
line : [213]; queue size : [0]
line : [213]; queue size : [0]
get data faild
line : [235]; queue size : [10]
line : [237]; queue size : [0]
阅读(...) 评论()

我要回帖

更多关于 自定义消息队列 的文章

 

随机推荐