7得票1回答
C++20视图管道中生成器被调用两次

在一个简单的views适配器管道中,这里调用了gen函数来生成一个值序列(使用内部状态),然后对其进行过滤。 令人惊讶且反直觉的是,在每次迭代中,生成器函数会被调用两次,所以过滤器上的下一个检查失败了(过滤后的值在管道中没有被重复使用)。 您是否知道这是否是预期行为(以及为什么)? 在G...

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循环...

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

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

7得票1回答
为什么在C++20中,我无法在 istream_view 后使用 take() 函数?

代码显示了我的问题,我无法在 `istream_view` 后使用 `take(3)`。 错误消息为: ``` /home/linuxbrew/.linuxbrew/Cellar/gcc/11.1.0_1/include/c++/11.1.0/ranges:1775:48: error: ...

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

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

7得票1回答
transform-view 的 std::prev 未定义行为

考虑以下代码( 在这里点击godbolt): #include <algorithm> #include <ranges> #include <vector> int main() { auto v = std::vector<short&...

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...

10得票1回答
为什么C++23范围适配器要求可调用对象是可拷贝构造的?

дёҖдәӣиҢғеӣҙйҖӮй…ҚеҷЁпјҢдҫӢеҰӮfilter_ВӯviewгҖҒtake_Вӯwhile_Вӯviewе’Ңtransform_viewпјҢдҪҝз”Ёstd::optionalзҡ„иЎЁе…„ејҹcopyable-boxжқҘеӯҳеӮЁеҸҜи°ғз”Ёе...

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

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