std-ranges相关内容

Range-for循环c++20中当前元素的访问索引

在C++20之前的问题Access index in range-for loop (answer)中提到 2020注意:使用基于lambda的解决方案可能比使用宏诡计更明智。 有人能发布基于lambda的C++20解决方案吗?C++20还有其他新的解决方案吗? 编辑:我有一个主循环,它在向量的大小上是多态的。由于我必须经常阅读和修改这段代码,我认为我有理由希望得到最好的解决方案 ..
发布时间:2022-05-17 13:04:43 C/C++开发

使用范围/视图而不是模板的通用编程?

我希望有接受任何固定类型容器的函数。例如,将同时接受std::array和std::array的函数。 我原以为使用Range可以做到这一点,但我意识到我的理解相当肤浅。 是否可以在没有模板的情况下实现? 编辑:我们是否可以使用范围库来定义一个类型,该范围库将执行与SPAN相同的操作,但将用于非连续容器?也许我的问题表达得不对,我的意思可能是视 ..
发布时间:2022-05-17 12:12:33 C/C++开发

为什么使用CRTP的std::Range::view_interface

根据cp首选项,使用奇怪的循环模板模式(CRTP)技术定义视图的助手类模板view_interface。 它们背后的设计理念是什么?与重写派生类中的虚拟基类方法相比,是否有显著优势? 推荐答案 如果您为基类提供虚函数,则它将具有这些函数。一直都是。它永远不能不具有这些函数,并且从它派生的每个类都将继承这些函数。 view_interface具有empty函数当且仅当该类型的范围 ..
发布时间:2022-05-17 10:25:23 C/C++开发

C++20 std::Range:每隔n个元素跳过的范围适配器

我正在努力更多地了解C++20的std::ranges实现,我遇到了一个看似简单的问题,如果不滚动我自己的实现,我就找不到标准的解决方案。 问题很简单:我只想使用C++20范围适配器访问和处理范围中每N个元素的和。例如,我正在寻找一个实用程序,该实用程序具有以下内容: for (auto x : std::ranges::iota_view{0, 10} | std::ranges:: ..
发布时间:2022-05-16 23:32:30 C/C++开发

C++20范围和排序

我正在处理C++20的最后四大特性,试图学习新的主要特性。 试着从网络上下载一些与范围相关的代码,我写道: std::vector ints{ 6, 5, 2, 8 }; auto even = [](int i) { return 0 == i % 2; }; // ranges... auto rr = ints | std::views::filter(even) ..
发布时间:2022-05-16 22:32:46 C/C++开发

C++20:如何按大小划分范围?

我要将范围{1, 2, 3, 4, 5}拆分为任意大小的子范围>;(例如,大小为2:{{1, 2}, {3, 4}, {5}})。 但std::views::split仅按分隔符拆分。 是否没有标准的反向联接或其他方法来执行此操作? 推荐答案 Range-v3调用此算法chunk。C++20中没有这样的范围适配器,但它是以相同名称为C++23建议的集合的一部分。For exa ..
发布时间:2022-05-16 21:13:08 C/C++开发

C++范围支持视图中的投影吗?

我知道Range中的算法(例如sort)支持投影,但在我看来,没有办法获得视图的这种功能... 我说的对吗? 以following working code为例: #include #include #include #include enum Color { Red, Green, ..
发布时间:2022-05-16 20:32:23 C/C++开发

生成器在C++20视图管道中调用了两次

在views适配器的简单管道中,有gen函数被调用以生成值序列(使用内部状态),然后对其进行筛选。 令人惊讶和违反直觉(至少对我来说)的是,生成器函数在每次迭代中被调用两次,因此对同一筛选器的下一次检查失败(筛选的值不会在管道中重复使用)。 您知道这是否是正确的预期行为(以及为什么)? 在GCC 10.3、11.1和干线(code)中使用libstdc++测试,和range-v3 ..
发布时间:2022-05-16 15:57:50 C/C++开发

对于需要两个参数的函数,如何在向量上使用std::Range?

我一直在尝试理解新的范围库,并尝试将一些更传统的for循环转换为函数代码。cppreference给出的示例代码非常简单易懂。但是,我不确定如何对需要查看、计算和比较每个x和y值的点向量应用范围,最后哪个值的距离最大。 struct Point { double x; double y; } double ComputeDistance(const Point& p1, const ..
发布时间:2022-05-16 15:11:34 C/C++开发

为什么较少引入STD::Range::?

在cppreference on std::ranges::less备注中,我们可以看到: 与std::less不同,std::ranges::less要求所有六个比较运算符、>=、==和!=都有效(通过totally_ordered_with约束)。 但是...为什么?为什么我们要使用std::ranges::less{}而不是std::less{}?如果只定义了 ..
发布时间:2022-05-16 14:37:53 C/C++开发