19得票1回答
std::ranges::begin和std::begin有什么区别?

使用 std::begin 和新的 std::ranges::begin 有什么区别呢?(对于end,size等也是一样的。) 两者似乎工作方式相同:#include <iostream> #include <vector> #include <array&gt...

19得票1回答
为什么std::ranges算法缺乏并行重载(需要执行策略参数)?

C++ Algorithms库 中的许多函数具有采用 ExecutionPolicy 参数的重载形式,例如std::copy。然而,我注意到std::ranges 命名空间中对应的函数没有这些并行重载。这很不幸,因为这意味着在许多情况下,非 range 版本将更加有用。 这是什么原因呢?是否...

17得票3回答
在我的自定义std::ranges迭代器中,我缺少什么?

我希望为客户数据结构提供一个视图,并使用自己的迭代器。我编写了一个小程序来测试它,如下所示。如果我取消注释begin()函数,则程序正常运行。但是,如果我使用DummyIter,则会出现编译错误。 在我的完整程序中,我已经实现了一个完整的迭代器,但为简单起见,在此处缩小了必要函数范围。 #...

17得票1回答
范围适配器的begin/end的const重载是否不充分约束?

在C++20中,一些范围具有const和非const的begin()/end(),而其他范围仅具有非const的begin()/end()。 为了使包装前者的范围适配器能够在其const限定时使用begin()/end(),一些范围适配器,例如elements_view, reverse_v...

15得票1回答
检测范围大小的编译时常量性

请注意,在提出这个问题之后,一个缺陷报告改变了下面提到的行为。请参阅问题末尾。 编译器探索器链接 考虑以下内容: // Variant 1 template<auto> struct require_constexpr; template<typename R&...

15得票1回答
为什么ranges不能用于pipes库功能?

Jonathan Boccara(《Fluent C++》的作者)编写了一个名为pipes的库。 该仓库的主页说,这种“管道”不像使用范围那样,尽管看起来很相似:它不是基于惰性拉取,而是饥饿推送。但是声明说,不能使用范围库执行各种“管道”操作。例如: unzip - 采取压缩的输入-基本...

15得票1回答
为什么std::ranges::find无法编译,而std::find却可以正常工作?

考虑一下这段代码: #include <vector> #include <iostream> #include <cstdint> #include <ranges> int main() { struct S { ...

14得票1回答
iterator_category和iterator_concept之间有什么区别?

C++20带来了一个更强大的迭代器系统,其中之一是在迭代器类别的基础上引入了iterator_concept。 我发现C++20中许多迭代器的iterator_concept和iterator_category不一致。以最著名的iota_view为例。 using R = decltype...

14得票2回答
为什么引入了std::ranges::less?

在std::ranges::less的cppreference页面中的notes部分指出: 与std::less不同,std::ranges::less要求所有六个比较运算符<, <=, >, >=, ==和!=都是有效的(通过totally_ordered_with...

14得票1回答
C++20范围和排序

我正在处理C++ 20的最后四个主要特性,尝试学习新的主要功能。我从网上找到与范围相关的一些代码,写成了:std::vector ints{ 6, 5, 2, 8 }; auto even = [](int i) { return 0 == i % 2; }; // ranges.....