[ACE] ACE_Double_Linked_List
2009-12-13 18:46:38| 分类:
net_ACE
| 标签:
|举报
|字号大中小 订阅
对于 ACE 提供的 double linked list,要求 node 必须有 T* prev_, T* next_ 两个 public 的 data member。标准实现参考 ACE_DLList_Node。
class ACE_DLList_Node 在 Containers.h
class ACE_Double_Linked_List 以及迭代器在 Containers_T.h
-------------------
#include <ace/Log_Msg.h>
#include <ace/Containers.h>
int ACE_MAIN(int, ACE_TCHAR *[])
{
ACE_Double_Linked_List<ACE_DLList_Node> list;
list.insert_head(new ACE_DLList_Node((void*)10)); // 10
list.insert_head(new ACE_DLList_Node((void*)20)); // 20 10
ACE_DLList_Node *p = new ACE_DLList_Node((void*)30);
list.insert_tail(p); // 20 10 30
ACE_Double_Linked_List<ACE_DLList_Node>::ITERATOR itor(list);
if ( itor.first() )
{
while ( !itor.done() )
{
ACE_DEBUG((LM_DEBUG, ACE_TEXT("%d\n"), (*itor).item_));
itor.advance();
}
}
ACE_DEBUG((LM_DEBUG, ACE_TEXT("===\n")));
p = list.delete_head(); // 10 30
ACE_DEBUG((LM_DEBUG, ACE_TEXT("head = %d\n"), p->item_));
p = list.delete_tail(); // 10
ACE_DEBUG((LM_DEBUG, ACE_TEXT("tail = %d\n"), p->item_));
return 0;
}
-------------------
20
10
30
===
head = 20
tail = 30
-------------------
ps. ACE 5.4.2 中有个 bug,ACE_DLList_Node 的构造函数声明为
ACE_DLList_Node (void *&i, ACE_DLList_Node *n = 0, ACE_DLList_Node *p = 0);
导致 new ACE_DLList_Node((void *)10) 这样的语句居然无法变异。
而在 ACE 5.6.0 中已修正为
ACE_DLList_Node (void *i, ACE_DLList_Node *n = 0, ACE_DLList_Node *p = 0);
评论这张
转发至微博
转发至微博
评论