如何在未知宽度的二维vector中存储元素?含固定高度转储实例
C++二维Vector相关问题解答
嘿,我来帮你搞定这两个关于C++二维vector的问题,都是开发中经常碰到的场景,咱们一个个说:
问题1:不知道宽度时如何向二维Vector存储元素
其实C++里的std::vector<std::vector<int>>本身就是个动态结构,所谓的“宽度”也就是每个子vector的长度,完全不需要预先指定——它可以跟着你的数据动态调整。
举个最常见的例子:从标准输入读取数据,每行的元素数量不确定,咱们可以一行一行读,每行存成一个子vector,再把这个子vector塞进二维vector里:
#include <iostream> #include <vector> using namespace std; int main() { vector<vector<int>> vec2d; int num; // 循环读取每一行,直到输入结束(比如Windows按Ctrl+Z,Linux/macOS按Ctrl+D) while (cin.peek() != EOF) { vector<int> current_row; // 读取当前行的所有整数,直到遇到换行符 while (cin >> num && cin.peek() != '\n') { current_row.push_back(num); } // 处理行尾最后一个整数(避免被换行符截断) if (cin >> num) { current_row.push_back(num); } // 把当前行加入二维vector vec2d.push_back(current_row); } // 验证输出 for (auto& row : vec2d) { for (int val : row) { cout << val << " "; } cout << endl; } return 0; }
如果是你手里已经有一维数据,只是不知道该分成多少列(宽度),也可以根据业务逻辑动态决定什么时候新建子vector——比如每收集到某个特定条件的元素就换行,或者根据数据的某种特征拆分,本质都是利用二维vector子元素的动态性来实现的。
问题2:固定高度的二维Vector填充与输出
先理清楚需求:你有一维vector vec1 = {4,5,6,7},要放进高度固定为3的二维vector vec2里,最终展开输出是4 7 5 6。
仔细看输出结果,其实是按列优先填充,再按行顺序展开:
- 前3个元素先填满第一列:
vec2[0]放4,vec2[1]放5,vec2[2]放6 - 剩下的第4个元素7放到第二列的第一行:
vec2[0]再放7 - 最后按行输出的话,就是
vec2[0]的4、7,vec2[1]的5,vec2[2]的6,连起来就是4 7 5 6。
对应的代码实现如下:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vec1 = {4,5,6,7}; const int fixed_height = 3; // 先初始化二维vector,固定3行,每行都是空的子vector vector<vector<int>> vec2(fixed_height); for (size_t i = 0; i < vec1.size(); ++i) { // 用取模运算计算当前元素应该放到哪一行 int target_row = i % fixed_height; vec2[target_row].push_back(vec1[i]); } // 按要求输出展开后的结果 for (auto& row : vec2) { for (int val : row) { cout << val << " "; } } cout << endl; // 输出结果:4 7 5 6 return 0; }
这段代码的核心就是用i % fixed_height来分配元素的行位置,完美实现了按列填充的逻辑,而且因为子vector是动态的,会自动适应宽度,完全符合你的需求。
内容的提问来源于stack exchange,提问作者malicization
相关产品推荐
相关产品推荐

