4.4.4 减少重复输入
在填充数据时有的时候要输入重复数据,如果用之前的方法要写大量的重复代码,很麻烦也容易造成多写或少写的错误。assign库提供repeat()、repeat_fun()和range()三个函数来减轻工作量。
这三个函数的简要声明如下:
- template< class U >
- generic_list& repeat( std::size_t sz, U u );
-
- template< class Nullary_function >
- generic_list& repeat_fun( std::size_t sz, Nullary_function fun );
-
- template< class SinglePassIterator >
- generic_list& range( SinglePassIterator first,
- SinglePassIterator last );
- template< class SinglePassRange >
- generic_list& range( const SinglePassRange& r )
repeat()函数把第二个参数作为要填入的值,重复第一个参数指定的次数,与vector、deque等容器的构造函数很相似;repeat_fun()函数同样重复第一个参数的次数,但第二个参数是个无参的函数或函数对象,它返回填入的数值;range()函数则可以把一个序列全部或者部分元素插入到另一个序列里。
示范它们用法的代码如下:
- #include <boost/assign.hpp>
- #include <cstdlib> //for rand()
- int main()
- {
- using namespace boost::assign;
-
- vector<int> v = list_of(1).repeat(3, 2)(3)(4)(5);
- //v = 1,2,2,2,3,4,5
-
- multiset<int> ms ;
- insert(ms).repeat_fun(5, &rand).repeat(2, 1), 10;
- //ms = x,x,x,x,x,1,1,10
-
- deque<int> d;
- push_front(d).range(v.begin(), v.begin() + 5);
- //d = 3,2,2,2,1
- }