问题标签 [range-v3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 你如何声明一个 range-v3 视图返回值?
目前,我可以像这样编写 range-v3 视图:
但是如果我想从函数中返回 v,我需要知道它的类型。range-v3 视图的类型是什么?
c++ - 如何将 C++ range-v3 输出到 ostringstream?
此 range-v3 示例无法使用 Visual C++ 15.9 版进行编译:
这是设计使然吗?输出范围的方法是什么ostringstream
?
c++ - 显式 range-v3 decltype 评估为无效?
我正在尝试获取范围的显式类型(将来我可能希望将其作为字段存储在类中)。但是,由于某种原因,它评估为void
?
使用 g++ -std=c++17 编译时,它给出
(g++ 版本 g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0)
我在 Visual Studio 2017 v. 15.9 上遇到类似错误
这个问题是我的另一个问题的延续:如何将范围存储为类中的字段?但更具体,我相信它应该分开。
c++ - 如何隐藏 range-v3 的复杂范围类型?
我需要一个具有使用 range-v3 库返回某种范围的方法的类。为了实现这样一个类,我可以在该类的定义中正确编写它。例如:
但是,在我的真实案例中,该Foo::r
功能非常复杂,我想隐藏它的实现。特别是,实现使用了一些额外的库,否则在声明类时不需要包含这些库Foo
。
但是,当 的定义Foo::r
与其声明分开时,必须明确指定其返回类型。decltype
附带一些帮助:
头文件:
实现,cpp文件:
这直接完成了隐藏Foo::r
. 但是,返回值的类型仍然有效地“泄漏”了有关如何构造范围的信息。可能更糟糕的是,我现在被迫std::function
在范围管道中显式使用一个对象。
但是,返回范围的用户是否真的需要所有信息?所有Foo::r
关心的用户是它是某种可迭代的。它有:
begin()
给范围的开头一个迭代器end()
给一些迭代器或哨兵- 迭代器可以递增,以迭代范围
- 可以取消引用迭代器,给出某种类型
T
(Beta*
在示例中)。
用户不关心是否存在转换视图,也不关心转换、过滤器等的数量。
所以,我的问题是——有没有办法隐藏所有这些信息?我希望能够写出这样的东西:
在标题中:
在 cpp 文件中:
我可以接受这样一个事实,即生成的Iterable
类型可能包含由于隐藏过程而无法内联的真实函数调用。链接时优化可能会也可能不会在以后对其进行优化。
不幸的是,据我所知,这Iterable
只是一个概念,而不是库中的一个单独类型。
c++ - 按非惰性 lambda 表达式/投影排序
我有某种类型的元素数组T
。对于一些复杂的函数,我想按该函数的值对数组进行排序。有效率的。
当我对如何做这样的事情进行一些研究时,我很快发现 range::v3::sort
,从 range-v3 库中,可以在projections的帮助下使用。在这种情况下,T
可以将该值投影到比较器使用的新值上。问题是,它是懒惰地完成的。
考虑以下示例:
为简洁起见,此处保持T
简单。f
这给了我输出:
但设想这f
是一些我不想重复执行的复杂功能,每次在比较器中使用它(否则我可以编写一个自定义比较器并使用常规std::sort
)。我希望f
每个值都只被调用一次。但是,一旦对数组进行了排序,f
就可以丢弃 的结果。
此外,它们自身的真实价值T
也相对复杂。我可以快速交换两个元素,但我不应该将它们复制到一个新的临时容器(例如std::vector<std::pair<T,int>>
)中进行排序。
除了手动排序我的输入数组之外,还有一些简单的方法吗?
c++ - range-v3:静态断言失败:无法查看临时容器
我正在学习 range-v3 库,并且在编译以下代码时遇到问题:
g++ 说:
我已经尝试过 g++7 和 8 以及 clang 6。他们都说了类似的话。我的理解是问题出在第 39 行,我将临时返回。
我的目标是一次只计算一个渲染并将它们一一添加到总和中。显然这不适用于上面的代码。是否有可能使用范围库来制定它以及如何制定?
c++ - 如何使用 range-v3 库从 std::vector 获取列视图和行视图?
将 7x5 矩阵展平为 std::vector,我想使用 Eric Niebler 的 range-v3 库查看列和行。到目前为止,我设法(改进空间)获得了单行、单列和连接行的视图。
请参阅:https ://wandbox.org/permlink/8o4RgSucF3zSNuPN
但是我怎样才能快速了解:
行列表:
auto a = numbers | GetRows({2,3,5}, n);
连接的列:
auto b = numbers | GetCols(2, 4, n);
列列表:
auto c = numbers | GetCols({1,2,4}, n);
行列表(“未排序”):
auto d = numbers | GetRows({5,2,3}, n);
列列表(“未排序”):
auto e = numbers | GetCols({4,1,2}, n);
?
c++ - c++ 提升范围。数组中的对数组
我有一个 C 整数数组及其大小,即int* arr, unsigned size
. 我想从中获得类似的视图,它将具有成对的整数作为元素。
澄清一下,任务是:我收到一个类似的数组[1,2,3,4]
,我想要一个视图,这将是 smth like [(1,2),(3,4)]
。
是否有任何便捷的方法可以通过 boost 或 std 范围以这种方式转换数组?
c++ - range-v3 的 meta::defer 的实现是如何工作的?
这里是实现meta::defer
:
detail::defer_
detail::try_defer
struct id
struct nil_ {};
一个包装器,它使用 lambda 或 let 表达式中的类型参数 Ts 延迟模板 C 的实例化。
在下面的代码中,理想情况下 lambda 将被写为 lambda<_a,_b,push_back<_a,_b>>,但是这会失败,因为 push_back 期望它的第一个参数是一个列表,而不是一个占位符。相反,我们使用 defer 来表达它,如下所示:
根据用例,meta::defer
似乎将表达式推迟到 SFINAE 工作。但我无法弄清楚实现是如何工作的。
问题
1.如何meta::defer
工作?
2. libcxx 还有一个struct __dependent_type
,其定义为:
我还问了一个问题__dependent_type
(为避免重复,我不在__dependent_type
这里放细节)
如果meta::defer
只是推迟 SFINAE 的表达式,是否可以将其替换为__dependent_type
上面的,为什么?
c++ - 为什么 range-v3 库中缺少 interleave_view?
在 Eric Niebler 的 range-v3 日历示例中,他使用 interleave 后跟 chunk 来转置矩阵。
我想知道为什么交错不是 range-v3 库的一部分...