77得票6回答
如何编写使用临时容器的范围管道?

我有一个带有以下签名的第三方函数: std::vector<T> f(T t); 我还有一个现有的可能是无限范围 (range-v3排序) 的T类型命名为src。我想创建一个流水线,将f映射到该范围的所有元素,并将所有向量展平为具有所有元素的单个范围。 本能地,我会写如下代...

38得票2回答
为什么 `accumulate` 没有进入 C++20 的范围?

我怀疑 accumulate 不是唯一一个被淘汰的算法。 也许现在有更好的方法来对范围进行累加(折叠),因此 accumulate 已经过时了吗?

30得票1回答
为什么在这个例子中,Range-v3比STL更慢?

我在尝试使用Range-v3库执行一个高端的find_if操作,但好奇为什么google-benchmark始终将我的Range-v3代码排名低于我的std::find_if方法。无论是g++还是clang,都会使用-O3和#define NDEBUG。 我考虑的特定示例是使用STL的以下内...

25得票3回答
Range-v3运算符重载编写更短的代码

对于我的矩阵类,我想在range-v3视图上进行某种运算符重载(可能使用表达式模板)来实现+ - / * %。例如,如果我想获得两个列之和的视图,我想写成col_1 + col_2 取而代之rv::zip_with([](auto c1, auto c2) {return c1 + c2;},...

24得票1回答
有没有一种特性或约定来检查一个范围或拥有物品的`view_facade`?(例如,getlines)

鉴于 auto empty_line = [](auto& str){ return str.size() == 0; }; 由于ranges::getlines返回一个拥有自己缓冲区的前向迭代器的所有权的view_facade,因此我们在将这种类型的范围传递给算法之前,必须使其...

22得票3回答
如何从起始迭代器和结束迭代器创建一个范围?

我有一个包含获取起始和结束迭代器函数的对象:const_iterator err_begin() const const_iterator err_end() const 因为它们的名称不是begin和end,所以我不能直接将我的对象传递给range-v3中的函数。 是否有一个简单的包装器...

17得票1回答
如何将一个std::string切割成一系列(v3)的std::string_views?

我需要在所有空格处分割一个 std::string。然而,结果范围应该将其元素转换为 std::string_view。我正在处理范围的“元素类型”。我猜想,该类型类似于 c_str。如何将“分割”部分转换为 string_view?#include <string> #inclu...

16得票5回答
基于转换值查找最小元素

这是我从代码审查中接到的任务。我想要根据一种特殊的比较谓词从一组数据中选择最小值,就像这样:struct Complex { ... }; float calcReduction(Complex elem); Complex findMinValueWithPredicates(const...

15得票1回答
为什么ranges不能用于pipes库功能?

Jonathan Boccara(《Fluent C++》的作者)编写了一个名为pipes的库。 该仓库的主页说,这种“管道”不像使用范围那样,尽管看起来很相似:它不是基于惰性拉取,而是饥饿推送。但是声明说,不能使用范围库执行各种“管道”操作。例如: unzip - 采取压缩的输入-基本...

15得票1回答
我们是否能在C++20中构建带有视图的容器?

C++20标准版本将引入范围(Ranges)。 我的问题是:我们是否能够使用任何范围(包括范围视图)构造(现有的)标准库容器? 例如,下面这段代码是否可行: #include <vector> #include <iostream> #include <ra...