我正在玩Range-v3库以表现出一种荣耀,find_if
并且好奇为什么谷歌基准测试一直将我的Range-v3代码排序比我的std::find_if
方法更差.g ++和clang都用-O3
和表示相同的模式#define NDEBUG
.
我想到的具体例子是以下使用STL:
std::vector<int> lengths(large_number, random_number);
auto const to_find = std::accumulate(lengths.begin(), lengths.end(), 0l) / 2;
auto accumulated_length = 0l;
auto found = std::find_if(lengths.begin(), lengths.end(), [&](auto const &val) {
accumulated_length += val;
return to_find < accumulated_length;
});
auto found_index = std::distance(lengths.begin(), found);
Run Code Online (Sandbox Code Playgroud)
出于此说明的目的,这有点做作,但通常会有一个随机生成器用于向量中的to_find
变量和随机值lengths
.
使用Range-v3库,我得到以下代码
using namespace ranges;
std::vector<int> lengths(large_number, random_number);
auto const to_find = accumulate(lengths, 0l) / 2;
auto found_index = distance(lengths | view::partial_sum()
| view::take_while([=](auto const i) …
Run Code Online (Sandbox Code Playgroud)