46得票2回答
为什么必须将 std::ranges::filter_view 对象设置为非 const 来查询其元素?

#include <ranges> #include <iostream> #include <string_view> using namespace std::literals; int main() { auto fn_is_l = [](...

40得票2回答
C++20的ranges库中,有太多的 | 运算符吗?

我在使用 g++ 10.2 编译这段代码。有人知道为什么最后一个 std::views::reverse 在 results3 上会导致编译错误吗? #include <vector> #include <ranges> int main() { auto ...

28得票1回答
const 在 std::views 中是否失效?

void foo(const auto& collection) { *collection.begin() = 104; } int main() { std::vector<int> ints {1, 2, 3, 4, 5}; foo(ints...

26得票1回答
为什么迭代 std::ranges::views::join 如此缓慢

这是SO Answer的跟进。给定一个扁平的输入范围和三个size_t维度,该代码创建了一个嵌套的random_access_range,其中包含random_access_range的random_access_range模拟了一个三维数组。 Quickbench 使用嵌套的for循环...

23得票2回答
为什么 std::views::split() 可以编译通过,而使用未命名的字符串字面值作为模式的 split() 却无法编译通过?

当std::views::split()接收到一个未命名的字符串字面值作为模式时,它不会将该字符串分割,但它可以很好地处理未命名字符字面值。 #include <iomanip> #include <iostream> #include <ranges> ...

21得票3回答
擦除-删除习语如何与区间/约束算法配合使用?

我想使用C++20的约束算法来实现erase-remove惯用语:std::vector<int> v; v.erase(std::unique(std::begin(v), std::end(v)), std::end(v)); 但是当我进行简单的转换时:v.erase(std:...

20得票2回答
为什么std::vector不能接受类型为size_t的iota_view迭代器?

以下代码在n为size_t时无法编译通过,但对于int和unsigned则正常工作。 #include <vector> #include <ranges> int main() { size_t n = 1; auto view = std::ra...

20得票2回答
C++20中引入的std::views::all是用于什么的?

#include <vector> #include <ranges> int main() { auto v = std::vector{1, 2, 3, 4}; v | std::views::drop(2); // ok std::vie...

20得票3回答
为什么ranges::for_each返回函数?

遗留的`std::for_each`函数返回函数,因为标准只要求`Function`满足Cpp17MoveConstructible,根据[alg.foreach]。 template<class InputIterator, class Function> constex...

19得票1回答
我们真的需要将范围适配器隐式转换为布尔值吗?

由于 ranges::view_interface 拥有一个explicit operator bool()函数,这使得大多数C++20范围适配器都能够转换为 bool: https://godbolt.org/z/ccbPrG51cstatic_assert(views::iota(0));...