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

调整二维vector大小出现多余值:4×3矩阵输出异常求助

问题分析与解决

你的问题主要出在内层循环的判断条件错误,同时可能对矩阵的行/列定义存在混淆,我们一步步拆解解决:

1. 内层循环的核心错误

看你代码里的内层循环:

for (unsigned int j = 0; j < matrix.size(); j++) {
    std::cout << matrix[i][j];
}

matrix.size()获取的是外层vector的大小——也就是你设置的4行,所以这个循环会执行4次。但你每行只初始化了3个元素(std::vector<int>(3)),这不仅不符合你每行3个0的预期,还会触发未定义行为(这次碰巧输出0,但实际中可能导致程序崩溃或输出乱码)。

你应该用matrix[i].size()来获取每行的元素数(也就是列数),修正后的内层循环:

for (unsigned int j = 0; j < matrix[i].size(); j++) {
    std::cout << matrix[i][j];
}

2. 行与列的定义澄清

你提到想要创建4列3行的矩阵,但你的初始化代码:

matrix.resize(4, std::vector<int>(3));

这实际上创建的是4行3列的矩阵(外层vector的size代表行数,内层每个vector的size代表列数)。如果确实需要4列3行,你需要把参数反过来:

matrix.resize(3, std::vector<int>(4));

这样外层有3个元素(对应3行),每行包含4个元素(对应4列),就能得到你预期的列数配置。

修正后的完整代码

情况1:需要4行3列(每行3个0,共4行)

#include <iostream>
#include <vector>
int main(void) {
    std::vector< std::vector<int> > matrix;
    matrix.resize(4, std::vector<int>(3));
    for (unsigned int i = 0; i < matrix.size(); i++) {
        for (unsigned int j = 0; j < matrix[i].size(); j++) {
            std::cout << matrix[i][j];
        }
        std::cout << std::endl;
    }
    return 0;
}

输出结果:

000
000
000
000

情况2:需要3行4列(每行4个0,共3行)

#include <iostream>
#include <vector>
int main(void) {
    std::vector< std::vector<int> > matrix;
    matrix.resize(3, std::vector<int>(4));
    for (unsigned int i = 0; i < matrix.size(); i++) {
        for (unsigned int j = 0; j < matrix[i].size(); j++) {
            std::cout << matrix[i][j];
        }
        std::cout << std::endl;
    }
    return 0;
}

输出结果:

0000
0000
0000

总结

  • 遍历二维vector的每行元素时,一定要用matrix[i].size()来控制循环次数,避免越界和错误输出
  • 明确std::vector<std::vector<int>>的结构逻辑:外层容器存的是行,内层容器存的是对应行的列元素,初始化时别搞反参数顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:18:14