2009年3月31日星期二

【原】Boost库之assign的使用

Boost库的assign可以帮助我们把一系列的值赋给容器,并且语法更加清晰和简洁。下面我主要以vector和map容器为例,介绍assign中比较常用的赋值方法。其他容器的赋值方法与此类似,故不再赘述。

1. 使用重载操作符+=
vector<int> vctTemp;
vctTemp += 1, 2, 3;
// 打印出1,2,3
copy(vctTemp.begin(), vctTemp.end(), ostream_iterator<int>(cout, " "));

2. 使用push_back
push_back(vctTemp)(4)(5)(6); 或者
push_back(vctTemp) = 4, 5, 6;
另外,如果某容器有push_front函数,也可以使用assign中对应的push_front。

3. 使用list_of
vector<int> vct2 = list_of(7)(8) (9); 或者
vector<int> vct2 = list_of(7)(8) (9) .to_container(vct2);
array<int, 3> ay = list_of(1)(2)(3); 或者
array<int, 3> ay = list_of(1)(2)(3) .to_array(ay);
stack<int> sk = list_of(1)(2)(3).to_adapter(sk);
注意:用list_of给容器适配器赋值时,必须使用to_adapter,否则无法编译通过。

4. 使用tuple_list_of
vector<tuple<int, string, int> > vctTuple = tuple_list_of(1, "hi", 2)(3, "hu", 4);
BOOST_ASSERT(get<1>(vctTuple[1]) == "hu");

5. 使用repeat
push_back(vctTemp)(7)(8)(9).repeat(3, 10);
其中repeat函数的第1个参数为重复的次数,第2个参数为参数的值。

6. 使用range
push_back(vctTemp)(7)(8)(9).range(vct2.begin(), vct2.begin()+2);
其中range(iterBegin, iterEnd)函数使用的数值范围为[iterBegin, iterEnd)。

7. 使用insert
map<int, string> mapTemp;
insert(mapTemp)(1, "Hello")(2, "world")(3, "crearo");

8. 使用map_list_of(只能用于map容器)
map<string, int> map2 = map_list_of("hefei", 1)("nanjing", 2)("wuhan", 3);

2 条评论:

  1. good... assign提供的这些个方法用起来简单多了,呵呵。

    回复删除
  2. 的确比较方便,尤其是map的插入。

    回复删除