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

C++初学者求助:如何在自定义Matrix类中初始化二维vector

解决Matrix类二维vector初始化的问题

嘿,作为C++初学者能自己动手写Matrix类真的很棒!我来帮你搞定构造函数里的二维vector初始化问题~

首先先指出你现有代码的两个小问题:

  • 循环顺序搞反了:你需要先创建行(对应参数nb_row),再给每一行填充列(对应nb_col),而不是先列后行;
  • 循环体里没有实际添加元素的逻辑,这就是你卡壳的核心原因。

下面给你几种实用的解决方案,从基础到简洁写法都有:

方法1:用循环手动初始化(适合理解底层逻辑)

Matrix::Matrix(unsigned int nb_row, unsigned int nb_col) 
    : m_nbRow(nb_row), m_nbCol(nb_col) // 推荐用成员初始化列表,比构造函数体赋值更高效
{
    // 提前给外层vector预留行的空间,避免多次扩容带来的性能损耗
    m_data.reserve(nb_row);
    
    for (unsigned int i = 0; i < nb_row; ++i) {
        // 直接在m_data里构造一行:包含nb_col个long类型的默认值(这里用0L)
        m_data.emplace_back(nb_col, 0L);
        // 如果你习惯用push_back,也可以写:m_data.push_back(std::vector<long>(nb_col, 0L));
    }
}

这里emplace_back比push_back更高效,因为它直接在vector的内存空间里构造子vector,不需要额外的拷贝操作。

方法2:用vector构造函数直接初始化(最简洁)

如果你想少写代码,完全可以利用std::vector的构造函数特性,在成员初始化列表里一步完成所有初始化:

Matrix::Matrix(unsigned int nb_row, unsigned int nb_col) 
    : m_nbRow(nb_row), m_nbCol(nb_col),
      m_data(nb_row, std::vector<long>(nb_col, 0L))
{
    // 构造函数体可以完全为空,所有初始化工作都在上面的列表里完成了
}

这个写法的逻辑是:外层m_data被初始化为包含nb_row个元素的vector,每个元素又是一个包含nb_col个0L的std::vector<long>,完美匹配你想要的矩阵结构。

额外小提示

如果你的矩阵需要初始化为非0的默认值,只需要把代码里的0L换成你需要的数值就行,比如初始化为1的话就写1L。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:49:17