【问题标题】:Initializing a 2D Array using Pointers from a Class Member?使用类成员的指针初始化二维数组?
【发布时间】:2013-11-04 11:56:25
【问题描述】:

我想手动设置作为类成员的二维数组的值。主要是因为我已经用不同的方法用循环填充它,但我想用不同的方法手动填充它。

class SomeClass {
private:
   int** myArray;
public:
   void setMyArray(int /*h*/,int /*w*/);
}

void SomeClass::setMyArray() {
// Something like this:
this->myArray** = { {1,2,3},{3,2,1},{4,5,6}};

}

如果做不到这一点,有没有办法生成它的尺寸然后手动填充?

void SomeClass::setMyArray( int height, int width ) {
// Something like this:
this->myArray** = new*int[height];
for ( 0...height, i ) {
    this->myArray[i] = new[width];
}

    myArray** = {{1,2,3},{1,2,3},{1,2,3}};

}

【问题讨论】:

  • 你可以像这样初始化数组,就在你声明数组的时候。
  • 这并不能完全回答我的问题,你能澄清一下吗?如何在我的设置中声明允许我手动修改值的数组?
  • 您只能在声明时初始化(通过分配)普通数组。您以后只能通过分配给每个元素来填充数组,而不是通过分配“给整体”。这和其他数以千计的原因是您应该不惜一切代价避免它们的原因。
  • 这是因为我碰巧有一个或多或少是 20 x 4 表的数据,没有一个完全方便的模式来循环遍历每个元素。

标签: c++ pointers multidimensional-array


【解决方案1】:

避免裸指针:

vector<vector<int>> myArray {{1,2,3},{1,2,3},{1,2,3}};

您甚至可以稍后插入初始化器列表并重新编写您的类,如下所示:

class SomeClass
{
    vector<vector<int>> myArray;
public:
    void setMyArray()
    {
        myArray.insert(myArray.end(), {{1,2,3},{1,2,3},{1,2,3}});
    }
};

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多