是否有标准/事实标准(boost)包装器可以与定义 begin 和 end 的容器一起使用标准算法。让我用代码说明我的意思:
// instead of specifying begin and end
std::copy(vector.begin(), vector.end(), output);
// write as
xxx::copy(vector, output);
我知道这可以很容易地编写,但我特别寻找普遍存在的东西。 谢谢。
是否有标准/事实标准(boost)包装器可以与定义 begin 和 end 的容器一起使用标准算法。让我用代码说明我的意思:
// instead of specifying begin and end
std::copy(vector.begin(), vector.end(), output);
// write as
xxx::copy(vector, output);
我知道这可以很容易地编写,但我特别寻找普遍存在的东西。 谢谢。
Boost Range库有一个扩展叫做RangeEx,其中包含所有STL算法的范围包装器以及一些新的算法。
它最近已被纳入Boost中,因此尚未包含在当前的“官方”版本(1.41)中。在此之前,您可以从Boost Vault 下载最新版本。
不知道这是否会成为C ++标准的一部分,但它在Boost中的存在意味着它将成为事实上的标准。
我只在那些基于boost::range
库的算法中见过类似的情况,但即使是这些算法也不会真正修改标准算法,比如std::copy
或std::remove_if
-- 相关的算法需要编写以利用这样的范围包装器。
例如,请参阅Boost String Algorithms库。
std::copy(input.begin(), input.end(), std::back_inserter(output));
看起来真的让人很不舒服... 不幸的是,每当需要修改底层容器的结构(添加/删除元素)时,Boost.Range
就无法胜任了 :/ - Matthieu M.