对std::views::cartesian_product工作机制的困惑:输出与预期不符
std::views::cartesian_product 遍历行为不符合预期
另请参阅相关问题。
我在Godbolt上测试了如下C++程序:
#include <algorithm> #include <iostream> #include <ranges> #include <sstream> int main() { std::istringstream iss{"\x{01}\x{02}\x{03}\x{04}"}; auto view = std::views::istream<char>(iss) | std::views::chunk(2) | std::views::transform([](auto t) { return std::ranges::fold_left(t, 0, std::plus{}); }); for (const auto& p : std::views::cartesian_product(view, std::views::iota(0, 3))) { const auto [s, i] = p; std::cout << s << ", " << i << '\n'; } return 0; }
GCC和Clang的运行结果均为:
3, 0 0, 1 0, 2 7, 0 0, 1 0, 2
根据cppreference的说明,std::views::cartesian_product的第一个参数应仅被遍历一次,预期输出应为:
3, 0 3, 1 3, 2 7, 0 7, 1 7, 2
曾看到一条已删除的相关评论:三次解引用view.begin()返回的迭代器得到3、0、0,这应为问题根源。
内容的提问来源于Stack Exchange,提问作者nilo
相关产品推荐
相关产品推荐

