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

C++中整型迭代器小于Vector返回大小却不执行循环问题

杨辉三角函数内层循环不执行的问题分析与解决

问题描述

编写返回vector<vector<int>>类型的杨辉三角函数时,发现函数返回空Vector,调试后确认内层for循环从未执行。打印迭代器k的值为-1,res首个元素的size为1,但执行cout << (k < res[i].size()) << endl;输出结果为0。原代码如下:

vector<vector<int>> generate(int numRows) {
    vector<vector<int>> res = { {1} };
    int k;
    for (int i = 0; i < numRows; i++)
    {
        vector<int> c = {};
        cout << res[i].size() << endl;
        for (k = -1; k < res[i].size(); k++)
        {
            if (k == -1 || k == res[i].size() - 1)
            {
                c.push_back(1);
            }
            else
            {
                c.push_back(res[i][k] + res[i][k + 1]);
            }
        }
        res.push_back(c);
    }

    return res;
}

问题根源

核心原因是类型不匹配导致的隐式转换:

  • res[i].size()返回的是size_t类型(无符号整数,取值范围非负)
  • k是int类型的-1,当无符号整数和有符号整数比较时,int类型会被隐式转换为size_t类型
  • -1转换为size_t后会变成一个极大的正数(例如64位系统中为18446744073709551615),远大于res[i].size()的1,因此k < res[i].size()的结果为false,内层循环直接跳过。

此外原代码还有逻辑冗余:初始res已经包含杨辉三角的第一行{1},外层循环i < numRows会导致最终生成的行数比预期多1行(例如numRows=5会生成6行)。

修正方案

调整循环逻辑,避免负数迭代器和类型不匹配问题,同时修正行数生成逻辑:

vector<vector<int>> generate(int numRows) {
    if (numRows == 0) return {};
    vector<vector<int>> res = {{1}};
    // 初始已有1行,只需生成numRows-1行
    for (int i = 1; i < numRows; ++i) {
        vector<int> current_row;
        current_row.push_back(1); // 行首元素固定为1
        // 遍历上一行的相邻元素求和
        for (int k = 0; k < res[i-1].size() - 1; ++k) {
            current_row.push_back(res[i-1][k] + res[i-1][k+1]);
        }
        current_row.push_back(1); // 行尾元素固定为1
        res.push_back(current_row);
    }
    return res;
}

修正点说明

  • 增加numRows=0的边界处理,返回空Vector
  • 外层循环从i=1开始,循环次数为numRows-1,保证最终生成行数与输入一致
  • 内层循环直接遍历上一行的有效索引范围,避免负数迭代器带来的类型转换问题
  • 行首和行尾的1直接单独添加,逻辑更清晰

如果一定要保留原代码的思路,也可以通过显式类型转换解决比较问题:

// 内层循环条件修改为:将size_t转为int,避免无符号转换
for (k = -1; k < static_cast<int>(res[i].size()); k++)

但这种方式不如调整循环逻辑直观,且存在res[i].size()超过int取值范围的潜在风险,不推荐。

内容的提问来源于stack exchange,提问作者Aland Liu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:01:26