设为首页 加入收藏

TOP

4.4.5 与非标准容器工作
2013-10-07 15:00:38 来源: 作者: 【 】 浏览:61
Tags:4.4.5 标准 容器 工作

4.4.5  与非标准容器工作

assign库不仅支持全部八个STL标准容器(vector、string、deque、list、set、multiset、map、multimap),也对STL中的容器适配器提供了适当的支持,包括stack、queue和priority_queue。

因为stack等容器适配器不符合容器的定义,没有insert、push_back等成员函数,所以不能使用赋值的方式填入元素,只能使用初始化的方式,并在list_of表达式最后使用to_adapter()成员函数来适配到非标准容器。如果使用逗号操作符还需要把整个表达式用括号括起来,才能使用点号调用to_adapter()。

示范assign库应用于容器适配器的代码如下:

  1. #include <boost/assign.hpp> 
  2. #include <stack> 
  3. #include <queue> 
  4.  
  5. int main()  
  6. {  
  7.     using namespace boost::assign;  
  8.  
  9.     stack<int> stk = (list_of(1), 2, 3).to_adapter();  
  10.     while(!stk.empty())                             //输出stack的内容  
  11.     {  
  12.         cout << stk.top() << " ";  
  13.         stk.pop();  
  14.     }  
  15.     cout << endl;  
  16.  
  17.     queue<string> q = (list_of("china")("us")("uk")).repeat(2, "russia").to_          adapter();  
  18.     while(!q.empty())                               //输出queue的内容  
  19.     {  
  20.         cout << q.front() << " ";  
  21.         q.pop();  
  22.     }  
  23.     cout << endl;  
  24.  
  25.     priority_queue<double> pq = (list_of(1.414), 1.732, 2.236).to_adapter();  
  26.     while(!pq.empty())                              //输出优先队列的内容  
  27.     {  
  28.         cout << pq.top() << " " ;  
  29.         pq.pop();  
  30.     }  
  31.  
  32. }  

程序运行结果如下:
  1. 3 2 1  
  2. china us uk russia russia  
  3. 2.236 1.732 1.414   

assign库也支持部分不在STL中定义的非标准容器,如STLport中的slist和hash_ set/hash_map,因为它们符合容器的定义,故用法与标准容器没有什么区别。

示范assign库应用于非标准容器的代码如下:

  1. #include <boost/assign.hpp> 
  2. #include <hash_map>                             //非标准的散列映射容器  
  3. #include <slist>                                    //非标准的单向链表  
  4. int main()  
  5. {  
  6.     using namespace boost::assign;  
  7.  
  8.     slist<int> sl;  
  9.     push_front(sl), 1,2,3,4,5;                      //不能用push_back和insert  
  10.  
  11.     hash_map<string, int> hm = map_list_of("one", 1)("two", 2);  
  12. }  

此外,assign库还支持大部分Boost库容器,如array、circular_buffer、unordered等,用法同样与标准容器基本类似,在第7章可以找到更多的示例代码。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.6.1 boost.pool的单件实现 下一篇4.5.3 特化std::swap

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: