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

如何用push_back实现可变行数固定列数的二维std::vector并访问列

实现行数可变、列数固定的二维vector方案

核心思路

保持每一行的vector固定为2列,仅通过push_back动态添加行,访问逻辑和固定行数时一致——关键是确保每次新增的行符合列数要求。

正确实现步骤

  1. 初始化二维vector
    不需要预先指定行数,直接声明空的二维vector即可:
std::vector<std::vector<int>> test;
  1. 动态添加行并赋值
    每次新增行时,构造一个大小为2的vector(可初始化为0或直接接收输入),再通过push_back加入二维vector:
// 方式1:先构造行再赋值
std::vector<int> new_row(2); // 初始化两个元素为0
std::cin >> new_row[0] >> new_row[1];
test.push_back(new_row);

// 方式2:直接在push_back中构造行,再赋值
test.push_back(std::vector<int>(2)); // 新增一行,两个元素默认初始化
int last_row_idx = test.size() - 1; // 获取刚新增行的索引
std::cin >> test[last_row_idx][0] >> test[last_row_idx][1];
  1. 访问指定列
    只要每行的vector大小为2,使用[]或at()访问都是有效的(at()会做越界检查并抛出异常;[]不做检查但效率稍高):
// 遍历所有行,输出每列数据
for (int i = 0; i < test.size(); ++i) {
    // 用[]访问
    std::cout << "第" << i+1 << "行:" << test[i][0] << ", " << test[i][1] << std::endl;
    
    // 用at()访问(适合需要越界检查的场景)
    // std::cout << "第" << i+1 << "行:" << test.at(i).at(0) << ", " << test.at(i).at(1) << std::endl;
}

常见问题排查

你之前尝试test.at(i).at(0)无效,大概率是因为新增行时没有构造大小为2的vector(比如push_back了空vector),导致访问索引0时触发越界异常。只要确保每次push_back的行是大小为2的vector,两种访问方式都能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:50:37