问题标签 [std-ranges]

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.

0 投票
1 回答
172 浏览

c++ - 用户定义的容器不适用于 std::ranges

我无法让我的用户定义容器与 std::ranges 一起使用。如果迭代器只是一个,我的容器可以工作,int*但是一旦我创建自己的迭代器类,我就会得到编译器错误。

这行得通。

https://godbolt.org/z/nxr1qe

使用我自己的迭代器它不起作用。

https://godbolt.org/z/o9rzhf

为了完成这项工作,是否需要做一些新的事情std::ranges

我正在使用 Visual Studio 16.8.4(写作时的最新版本)进行编译,编译错误是

但是 GCC 给出了同样的错误。

我找到了如何制作范围视图的例子,但没有一个例子告诉我如何制作我自己的迭代器。

0 投票
1 回答
179 浏览

c++ - 为什么 std::ranges::view_interface 使用 CRTP

根据 cppreference,view_interface使用奇怪重复模板模式 (CRTP) 技术定义视图的帮助类模板。

它们背后的设计理念是什么?与在派生类中覆盖虚拟基类方法相比,是否有显着优势?

0 投票
2 回答
3190 浏览

c++ - C++20 范围太多 | 运营商?

我为此代码使用 g++ 10.2。有谁知道为什么我最后一个编译器std::views::reverse错误results3

错误片段:

完整的错误集可以在这里看到:https ://godbolt.org/z/Y7Gjqd

0 投票
1 回答
122 浏览

c++ - 在自定义容器上使用范围算法

我想升级我的自定义容器以与std::ranges诸如find_if和其他算法兼容,如下所示

std::ranges::find_if喜欢的签名

什么是input_range 概念以及我自己的自定义容器如何支持此功能?

0 投票
3 回答
123 浏览

c++ - 我可以/应该使用范围库来模拟集合函数吗?

我想将 aview::filter应用于一个向量,以便找到它与另一个向量的 set_intersection(或 set_difference 等)。

我这样做的兴趣在于它允许您更改原始容器的特定子集(并且还可以节省一些附带的复制std::set_intersection)。

这或多或少是我想要做的:

然而,这段代码看起来非常低效,因为它会多次迭代 set2。ranges图书馆有没有更好的方法来实现这一点?

0 投票
2 回答
290 浏览

c++ - C++20 Streams 又名 Ranges

当我使用 Stream Library ( http://jscheiny.github.io/Streams/api.html# ) 时,我可以在 Java-Streams 中执行类似的操作:

它给出了这个输出:

在 C++20 中,我发现了范围,它们看起来有望实现相同的目标。但是,当我想构建类似的函数式编程风格时,它不起作用:

尽管像这样的文章( https://www.modernescpp.com/index.php/c-20-the-ranges-library)提出了这样的功能,但接缝范围的事情并不意味着像这样工作。

有什么想法我仍然可以在 C++20 中做类似的事情吗?

0 投票
0 回答
110 浏览

c++ - 如何旋转向量的特定子集?

我想在整个向量内旋转向量的子集。要旋转的子集由另一个向量定义。

我想要实现的是:

给定的子集保证包含在更大的整个集合中。子集可以是整体的任何子集,以任何顺序;它不必是连续的。

这是我迄今为止尝试过的:

这行得通,但是对我来说感觉有点粗略。我想知道是否有一些巧妙的方法可以使用RangesC++20 中的库来做到这一点。像这样的东西:

我对 Ranges 库还没有很好的了解,但我认为这样的事情应该是可能的。

请注意:我希望解决方案在某种程度上使用简单std::rotate()。这样做的原因是我也想在子集上执行其他类似的功能(即std::shuffle()),所以在最终版本中执行旋转/洗牌/任何东西的实际功能将是一个变量。这是我在这里真正感兴趣的“更改子集”部分;其余的将在稍后合并。

0 投票
1 回答
116 浏览

c++ - 为什么我不能在 `const filter_view` 上调用 `ranges::begin`?

我不能ranges::begin打电话const filter_view

https://en.cppreference.com/w/cpp/ranges/filter_viewbegin似乎end不是const。 _ 这是为什么?

https://godbolt.org/z/4feaYc

0 投票
2 回答
95 浏览

c++ - c++20 使用结构成员变量和 std::ranges 对结构进行排序向量

我有一个简单的结构

我有一个向量MyStructs。

myStructs我将如何根据成员变量.x使用排序std::ranges

0 投票
1 回答
72 浏览

c++ - 无法满足范围约束::count()

我正在探索范围函数。

count_if 按预期运行。计数表达式在 MSVS 2019 中生成错误。

错误 C7602 'std::ranges::_Count_fn::operator ()': 不满足关联的约束 D:\Test\Code\Ranges\Ranges.cpp

它指向我的标准算法头。我显然不理解为 count 函数列出的唯一约束的indirect_binary_predicate。阅读 cppreference.com 是……没有帮助:-)。

我在这里想念什么?