小编fas*_*eep的帖子

为什么Range-v3在这个例子中比STL慢?

我正在玩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)

c++ performance range-v3

29
推荐指数
1
解决办法
2803
查看次数

标签 统计

c++ ×1

performance ×1

range-v3 ×1