C++中如何实现二维vector元素的垂直打印
调整思路
- 原代码是先行后列遍历,优先输出同一行的所有元素,所以是横向输出效果
- 要实现垂直打印,需要改成先列后行遍历:优先输出所有行同一列位置的元素,直到遍历完最长行的最后一列为止
- 额外需要先计算所有子vector的最大长度,作为外层循环的终止条件
调整后完整代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<vector<int>> a { {1,2,3,4,5}, {6,7,8}, {9,10,11} }; // 计算所有子vector的最大长度,即需要输出的总行数 size_t max_col = 0; for (auto &row : a) { max_col = max(max_col, row.size()); } // 外层循环遍历列索引,对应输出结果的每一行 for (size_t j = 0; j < max_col; j++) { // 内层循环遍历所有行,取当前列位置的元素 for (size_t i = 0; i < a.size(); i++) { // 仅当前行存在第j个元素时输出,避免数组越界 if (j < a[i].size()) { cout << a[i][j] << " "; } } cout << endl; } return 0; }
代码说明
- 计算得到的
max_col就是最长子vector的长度,对应你需要输出的垂直打印结果的总行数 - 外层循环每次处理所有行的第j个元素,处理完成后换行,正好对应垂直打印的一行输出
- 增加了越界判断,适配不同长度的子vector场景
内容的提问来源于stack exchange,提问作者Yasiru Lelwala
相关产品推荐
相关产品推荐

