本文共 1538 字,大约阅读时间需要 5 分钟。
http://hi.baidu.com/qingshanyin/blog/item/10ad021112a54ec0a7ef3fa6.html
1、前言
ACE提供的队列ACE_Unbounded_Queue支持从头部和尾部插入元素,但元素只能从头部取出。这和C++提供的队列不同,C++提供的队列只允许在序列的尾部插入元素。
队列的元素可以在堆上创建,也可以在栈上创建。
2、以下代码测试的是在栈上创建元素。因此在方法返回时候,它们均会被释放。
#pragma once
#include "ace/Unbounded_Queue.h" class DataElement; //ACE的队列支持在头部和尾部添加元素,但元素总从头部取出 class Queue_Practice { public: int static runStaticUnboundedQueue(void) { ACE_TRACE(ACE_TEXT("Queue_Practice::runStaticUnboundedQueue")); ACE_DEBUG((LM_DEBUG,ACE_TEXT("Using a StaticUnboundedQueue:/n"))); ACE_Unbounded_Queue<DataElement> queue; int i; //在队列的头部添加元素 //按照顺序添加元素:9,8,7,6,5,4,3,2,1,0 DataElement elem[10]; for(i=0;i<10;i++) { elem[i].setData(9-i); queue.enqueue_head(elem[i]); }//在队列的尾部添加元素
//按照顺序添加元素:10,11,12,13,14,15,16,17,18,19 DataElement elem2[10]; for(i=0;i<10;i++) { elem2[i].setData(i+10); queue.enqueue_tail(elem2[i]); }//这样,从队列头部到尾部的元素是:
//0,1,2,3,4,5,...19 //队列总是从头部开始取出 //下面是用迭代器来实现元素的读取 //for(ACE_Unbounded_Queue_Iterator<DataElement> iter(queue);!iter.done();iter.advance()) //{ // DataElement *elem; // iter.next(elem); // ACE_DEBUG((LM_DEBUG,ACE_TEXT("%d "),elem->getData())); // //一下是常犯的常识性错误:ACE_TEXT("%d "后面少了)符号,导致输出是错误的随机数 // //ACE_DEBUG((LM_DEBUG,ACE_TEXT("%d ",elem->getData()))); //}//也可以通过下面的方法来从队列中取出元素,不同的是,取出时,元素从队列中被移除了
while(!queue.is_empty()) { DataElement elem; //从队列中移除元素,注意元素内存释放队列可不管,因此若队列中元素是指针的话 //也就是说元素是在堆上分配的,那么元素本身的内存释放需要另外解决。 queue.dequeue_head(elem); ACE_DEBUG((LM_DEBUG,ACE_TEXT("%d "),elem.getData())); } ACE_DEBUG((LM_DEBUG,ACE_TEXT("/n"))); return 0; } };转载地址:http://xvgxi.baihongyu.com/