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

本文共 2390 字,大约阅读时间需要 7 分钟。

http://hi.baidu.com/qingshanyin/blog/item/086fa4343b6b0948251f14bd.html

 

1、前言

集合是不允许其所含条目重复的序列。ACE有两种集合:有界集合和无界集合,即ACE_Bounded_Set和ACE_Unbounded_Set。它们支持插入、查找、迭代。

2、测试完整源代码如下(原书本有多处错误)

#include "ace/Containers.h"

#include "DataElement.h"
//集合测试
//集合是不允许其所含条目重复的序列
//ACE有两种集合:有界集合和无界集合
class Set_Practice
{
public:
//测试有界集合:插入元素、执行查找、移除元素
int static runBoundedSet(void)
{
   ACE_TRACE(ACE_TEXT("Set_Practice::runBoundedSet"));
   ACE_DEBUG((LM_DEBUG,ACE_TEXT("Using a bounded set/n")));

   //声明一个有界集合,元素是在栈上创建,所以函数退出后,内存将全部被释放

   ACE_Bounded_Set<DataElement>bset(100);

   DataElement elem[100];

   for(int i=0;i<100;i++)
   {
    elem[i].setData(i);
    //插入元素
    bset.insert(elem[i]);
    //insert返回值:-1--插入失败,1--插入值目前已经存在,0--插入成功
    //原书有错误(p78)
    if(bset.insert(elem[i])==1)
    {
     ACE_DEBUG((LM_DEBUG,ACE_TEXT("%p/n"),ACE_TEXT("You insert an item that is already present.")));
    }
   }
   //元素个数
   ACE_DEBUG((LM_DEBUG,ACE_TEXT("The sum of active objects is %d/n"),DataElement::numOfActiveObjects()));

   DataElement elem1(10),elem2(49);

   //查找元素
   if(!bset.find(elem1)&&!bset.find(elem2))
   {
    ACE_DEBUG((LM_DEBUG,ACE_TEXT("The elements %d and %d are ")
     ACE_TEXT("in the set!/n"),elem1.getData(),elem2.getData()));
   }

   for(int j=0;j<100;j++)

   {
    bset.remove(elem[j]);//从集合中移除元素
    ACE_DEBUG((LM_DEBUG,ACE_TEXT("%d:"),elem[j].getData()));
   }
   ACE_DEBUG((LM_DEBUG,ACE_TEXT("/n")));

   //元素移除后,再执行查找

   if((bset.find(elem[0])==-1)&&(bset.find(elem[49])==-1))
   {
    ACE_DEBUG((LM_INFO,ACE_TEXT("The elements %d and %d are ")
     ACE_TEXT("NOT in the set!/n"),elem[0].getData(),elem[49].getData()));
   }

   return 0;

}
//测试无界集合,元素在堆上创建
//通过迭代器来进行集合元素访问
int static runUnboudedSet(void)
{
   ACE_TRACE(ACE_TEXT("Set_Practice::runBoundedSet"));
   ACE_DEBUG((LM_DEBUG,ACE_TEXT("Using a unbounded set/n")));
   //声明无界集合,元素是指针,因此在堆上创建
   ACE_Unbounded_Set<DataElement*> uset;
   for(int m=0;m<100;m++)
   {
    DataElement* elem;
    ACE_NEW_RETURN(elem,DataElement(m),-1);
    uset.insert(elem);//插入元素
   }
   DataElement deBegin(0),deEnd(99);
   //查询元素
   //从下面查询的参数看,很显然,元素是指针
   if(!uset.find(&deBegin)&&!uset.find(&deEnd))
   {
    ACE_DEBUG((LM_DEBUG,ACE_TEXT("Not Found the elements/n")));
   }
   ACE_DEBUG((LM_DEBUG,ACE_TEXT("Deleting the elements/n")));
   //迭代器声明
   ACE_Unbounded_Set_Iterator<DataElement*> iter(uset);
   //删除元素后,集合中的指针将是无效的
   for(iter=uset.begin();iter!=uset.end();iter.advance())
   {
    DataElement* elem=(*iter);
    ACE_DEBUG((LM_DEBUG,ACE_TEXT("%d:"),elem->getData()));
    delete elem;
   }
   ACE_DEBUG((LM_INFO,ACE_TEXT("/n")));
   return 0;
}
};

转载地址:http://ovgxi.baihongyu.com/

你可能感兴趣的文章
python abs()函数
查看>>
python bool()函数
查看>>
python divmod()函数
查看>>
python pow()和math.pow()函数
查看>>
python内建函数any()和all()
查看>>
python hex() oct() bin() 内置函数
查看>>
python apply()函数
查看>>
python eval()函数的妙用和滥用
查看>>
python中的反射和自省
查看>>
python反射示例
查看>>
CentOS安装后ifconfig 无法显示网卡
查看>>
Python random模块
查看>>
python 验证码
查看>>
python hashlib模块
查看>>
python数据持久存储:pickle模块的基本使用
查看>>
python pprint模块
查看>>
Python pickle模块学习(超级详细)
查看>>
Python StringIO模块 实现在内存缓冲区中读写数据
查看>>
Json概述以及python对json的相关操作
查看>>
python json模块使用示例
查看>>