4.4.6 高级用法
本节讨论关于assign库的一些高级用法。
list_of()的嵌套使用
list_of()可以就地创建匿名列表,这一点很有用,它可以嵌套在assign库用法中,创建复杂的数据结构。
下面的代码使用vector构造了一个二维数组,使用list_of(list_of())的嵌套形式来初始化:
- using namespace boost::assign;
- vector< vector<int> > v = list_of( list_of(1)(2))(list_of(3)(4));
-
- v += list_of(5)(6),list_of(7)(8);
引用初始化列表
在list_of之外assign库还有两个类似功能的ref_list_of()和cref_list_of(),这两个函数接受变量的引用作为参数来创建初始化匿名列表,较list_of()的效率更高,例如:
- using namespace boost::assign;
- int a = 1, b = 2, c = 3;
- vector<int> v = ref_list_of<3>(a)(b)(c);
- assert(v.size() == 3);
assign库还特别支持Boost中的指针容器,提供ptr_push_back()、ptr_list_of()等函数。由于本书未涉及指针容器,故在这里不做介绍,感兴趣的读者请阅读Boost说明文档中assign库和pointer container相关部分。