You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:51:15