问题标签 [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.
c++ - 为什么 C++20 不提供范围/约束版本的算法?
根据cppreference, header 下的所有数字算法都<numeric>没有ranges在 C++20 中获得版本。有原因吗?
c++ - 当匹配计数大于某个阈值时,我可以使用 C++20 范围来中断吗?
考虑以下前置范围代码:
它看起来比原始循环更好,但如果 val 在 v 中很常见,它可能会非常低效。
有什么方法可以使用 C++20 范围,以便在我遇到 val 6 次后停止迭代。换句话说,我正在寻找一种在满足我的条件时引入休息的方法。我有这个可憎的东西,这似乎有效,但它比原始 for 循环丑得多。
c++ - 使用基于概念的递归函数模板在扣除“auto”之前使用“auto [...]”
我想创建一个deep_flatten函数模板,它会产生一个深度编辑range的元素。join例如,如果我们只考虑嵌套std::vector的 s,我可以有:
这使我能够做到:
正如预期的那样,它将以下文本打印到控制台中:
但是,我不太喜欢这个解决方案。它不仅效率低下(创建许多临时向量),而且它也仅适用于std::vectors. 我想我可以使用更多的c++20魔法和使用std::ranges::range概念:
这在我看来很简单——我们有一个std::ranges::range并且我们检查它的值类型。根据它是否是嵌套范围,我们递归或简单地返回joined 元素。
可悲的是,它不起作用。尝试运行后:
我收到一条错误消息:
研究了类似的问题后,我无法真正理解为什么会出现错误。
我在用gcc version 10.1.0 (Rev3, Built by MSYS2 project)
c++ - C++20 std::ranges::sort 是否不需要支持 std::vector?
我注意到std::ranges::sort无法排序std::vector<bool>:
这是允许的吗?我们是否需要专门化std::ranges::sortfor std::vector<bool>?有没有关于委员会如何考虑的信息?
c++ - 为什么要引入 std::ranges::less ?
在cppreference on 上std::ranges::less,在注释中我们可以看到:
与 不同
std::less,std::ranges::less要求所有六个比较运算符<、<=、>、>=和==都!=有效(通过totally_ordered_with约束)。
但为什么?为什么我们要使用std::ranges::less{}而不是std::less{}?less{}仅当定义了其他比较运算符(而不仅仅是一个)时,我们才想要的实际情况是什么<?
c++ - 为什么 const char[] 更适合 std::ranges::range 而不是显式的 const char* 自由重载,以及如何解决它?
我想<<为任何人写一个通用的range,我最终得到了这个:
像这样测试:
它完美地工作并输出:
但是,当测试时:
它出乎意料地输出:
用调试器运行这段代码,我得出一个结论,空范围的问题是我们运行return out << "[]";. 一些 C++ 魔法决定了我刚刚写的,
是更好的匹配,然后提供<ostream>,
因此,它不像我们通常看到的那样仅发送"[]"到输出流,而是递归回自身,但"[]"作为range参数。
那是更好的匹配的原因是什么?[与]单独发送相比,我可以以更优雅的方式解决此问题吗?
编辑:这似乎很可能是 GCC 10.1.0 中的一个错误,因为较新的版本拒绝该代码。
c++ - 创建自己的(管道)范围 ::views 和 ::actions 的规则是什么?
在这个答案中,我们可以看到我们可以创建自己的views。我试过了:
当我认为我成功了:
原来我真的失败了,因为std::ranges::range<decltype(rng)>是false。
试图找出原因,我试图采取std::ranges::begin(rng),这导致了几十行错误,或多或少归结为:
这很奇怪,因为我确实提供了成员begin()和end()(除非__member_begin<_Tp>没有做它看起来正在做的事情)。
完整的错误信息如下:
我到底错过了什么?如何正确创建自己的<ranges>扩展?