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

如何在未知宽度的二维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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:25:24