设为首页 加入收藏

TOP

4.4.2 使用操作符()向容器增加元素
2013-10-07 15:00:49 来源: 作者: 【 】 浏览:64
Tags:4.4.2 使用 操作 容器 增加 元素

4.4.2  使用操作符()向容器增加元素

因为operator+=使用上有些小的限制,而且在处理map容器时也显得有些麻烦,assign库使用操作符operator()提供更通用的解决方案。

我们不能直接使用operator(),而应当使用assign库提供三个辅助函数insert()、push_front()、push_back()。这些函数可作用于拥有同名成员函数的容器,接受容器变量作为参数,返回一个代理对象list_inserter,它重载了operator(),=等操作符用来实现向容器填入数据的功能。

示范辅助函数insert()、push_front()、push_back()用法的代码如下:

  1. #include <boost/assign.hpp> 
  2. int main()  
  3. {  
  4.    using namespace boost::assign;  
  5.    vector<int> v;  
  6.    push_back(v)(1)(2)(3)(4)(5);                 //使用push_back辅助函数  
  7.  
  8.    list<string> l;  
  9.    push_front(l)("cpp")("java")("c#")("python");    //使用push_front辅助函数  
  10.  
  11.    set<double> s;  
  12.    insert(s)(3.14)(0.618)(1.732);                   //使用insert辅助函数  
  13.  
  14.    map<int, string> m;  
  15.    insert(m)(1, "one")(2, "two");                   //使用insert辅助函数  
  16. }  

这段代码与使用operator+=没有太多的不同。对于拥有push_back()或push_front()成员函数的容器(vector、list),可以调用assign::push_back()或assign::push_ front(),而对于set和map,则只能使用assign::insert()。

operator()的好处是可以在括号中使用多个参数,这对于map这样的元素是由多个值组成类型非常方便,避免了make_pair()函数的使用。而且,如果括号中没有参数,那么将调用容器元素的缺省构造函数填入一个缺省值,逗号操作符则不能这样做。

括号操作符也可以与逗号等操作符配合使用,写法更简单,有时甚至看起来不像是合法的C++(www.cppentry.com)代码(但的确是完全正确的C++(www.cppentry.com)代码),例如:

  1. using namespace boost::assign;  
  2. vector<int> v;  
  3. push_back(v),1,2,3,4,5;  
  4. push_back(v)(6),7,64 / 8,(9),10;  
  5. // v =[ 1 2 3 4 5 6 7 8 9 10]  
  6. deque<string> d;  
  7. push_front(d)() = "cpp","java","c#","python";  
  8. assert(d.size()==5);  
  9. // d = ['python', 'c#', 'java', 'cpp', '']  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.5.4 特化ADL可找到的swap 下一篇4.4.1 使用操作符+=向容器增加元素

评论

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