问题标签 [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 投票
2 回答
478 浏览

c++ - 错误:“排序”不是“std::ranges”的成员;你的意思是'std :: sort'吗?

我运行了以下代码

当我编译时g++ -std=c++20 file.cpp,我得到

  • gcc --version: gcc 10.2.0
  • g++ --version: g++ 10.2.0

为什么排序不是成员?我正在使用 VScode 智能感知,它显示诸如advancebegin、之类的方法common_view。但不排序。

0 投票
1 回答
225 浏览

c++ - 错误:不匹配调用 '(const std::ranges::__sort_fn)

我正在练习vectors并且ranges陷入c++ 20以下状态。

我编译了代码g++ 10.2并得到了错误

而不是std::views::transform,我也试过

  1. 拉姆达表达式
  2. ranges::sort(models, {}, &Model::next_event_time)

但他们都产生了类似no match for call to的错误。为什么会这样?

0 投票
1 回答
224 浏览

c++ - std::ranges::copy 在 Visual Studio 中不接受 std::vector

下面的代码不能在 Visual Studio 中编译,给出

错误 C2672 'operator __surrogate_func':找不到匹配的重载函数 sortms C:\Users\David\source\repos\sortms\sortms.cpp 103

当我使用 C 样式数组时,该函数按编写方式工作。如果我使用指定的注释代码,该函数也可以工作input.begin(), input.end(), output.begin()

我正在使用 Visual Studio Community 2019 v16.8.6,使用该/std:c++latest选项进行编译。我认为标准容器是基于范围的?

有人可以帮助我更好地理解std::range::copy()vsstd::copy()在处理向量或其他标准容器时的优势吗?

0 投票
1 回答
60 浏览

c++ - 如何在没有飞船比较运算符的情况下满足自定义类型的完全排序(范围::is_sorted,范围::排序)

考虑以下代码:

可以通过在 A 中添加“spaceship”比较运算符来修复代码:

但是,在类之外定义它适用于第一个assert,而不是第二个:

ranges::less不修改是否可以满足要求A

0 投票
1 回答
68 浏览

c++ - 相对简单的自定义容器签名不满足概念

我正在尝试使用<ranges>(C++20 MSVC) 来迭代一个名为 的自定义容器Span,其begin/end()方法返回一个SpanIter. 但是,以下静态断言在该test()方法中失败,并且管道运算符无法被我的类识别(但不是vector<>)。

我认为方法签名与这个工作示例相匹配。我无法追踪丢失的内容,无论是方法还是 typedef/using。

0 投票
1 回答
658 浏览

c++ - 为什么我不能从范围迭代器构造 string_view?

C++20 添加了一个构造函数basic_string_view该构造函数需要两个迭代器。但是,当我尝试string_view使用来自公共范围的迭代器构造 a 时,我得到一个错误。

https://godbolt.org/z/E4779G

0 投票
1 回答
86 浏览

c++ - 是单行初始化可以用 C++20?

我想知道<ranges>在 C++20 中是否最终可以从序列中选择并set在一行中初始化 a ,就像在 C# 中使用IEnumerable. 这可能需要将<ranges>对象转换为std::initializer_list.

C#:

C++:

我想做类似的事情:

0 投票
3 回答
159 浏览

c++ - 范围适配器对于可视范围后面的参数是否懒惰?

C++20 标准在[range.adaptors.general]中说范围适配器

在迭代结果视图时懒惰地评估。

另一方面,[range.filter.view]中有一条关于 filter_view 的 begin 函数的注释,提到缓存结果。那么适配器的懒惰到什么程度呢?

执行以下代码时:

是否保证适配器会尊重filter变量的值?如果不是,我在调用什么样的行为,它在哪里声明?

0 投票
4 回答
98 浏览

c++ - 是否可以从对象创建引用视图?

为了说明我的意思:我有三个对象:

我想构建一个包含对这些对象的引用的视图,如下所示:first&、odd&、even&、odd& ... 最多 N。为了能够迭代它们:

或将视图传递给函数:

最新的 std::ranges 或 v3 范围库是否可以在不编写我自己的容器类的情况下实现这一点?

0 投票
1 回答
108 浏览

c++ - 为什么 C++20 范围适配器的返回视图不是常量表达式?

考虑以下代码:

msvc 接受它,gcc拒绝它:

为什么r不是常量表达式?