博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACE篇之七:ACE容器之三(队列)
阅读量:4169 次
发布时间:2019-05-26

本文共 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/

你可能感兴趣的文章
内核线程创建
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
java SE面向对象思维导图
查看>>
三维分析之视频投放
查看>>
SuperMap iDesktop之栅格值怎么查
查看>>
SuperMap iClient3D for WebGL教程-orientation
查看>>
SuperMap iClient3D for WebGL教程-description描述属性
查看>>
SuperMap iClient3D for WebGL教程-CallbackProperty
查看>>
如何修改leaflet聚合图的层级和样式
查看>>
三维分析之开敞度分析
查看>>
BIM+GIS应用的八大挑战
查看>>
.net实现.aspx页面自动加载.cs程序定义的变量并按照格式输出
查看>>
[Leetcode]最后一个单词的长度
查看>>
merges sort use c++
查看>>
插入排序用递归实现
查看>>
工作流审批平台-审批流程-指定审批部门
查看>>
商务智能-系统概述-数据图形方式
查看>>
软件项目管理系统-项目管理-模块定义-开发内容
查看>>
工作流审批平台-审批功能
查看>>