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