看看replace_copy_if的一个简单的例子:
std::vector<int> vec;
boost::replace_copy_if(rng, std::back_inserter(vec), pred, new_value);
对于这种写法,如果使用Range Adaptor的话,则可以写成:
std::vector<int> vec;
boost::push_back(vec, rng | boost::adaptors::replaced_if(pred, new_value));
第二种写法有什么好处呢,
1. 更高效率。因为std::back_inserter有额外的内存分配开销。
2. 更灵活。因为第二种写法可以应用更多的适配器,比如: boost::push_back(vec, rng | boost::adaptors::replaced_if(pred, new_value) | boost::adaptors::reversed);
3. 更安全。因为第二种写法没有用unbounded output iterator。