调整二维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
相关产品推荐
相关产品推荐

