【问题标题】:how to initialize a 2D array inside a class while creating and object of it如何在创建类和对象时在类中初始化二维数组
【发布时间】:2019-02-26 20:35:35
【问题描述】:

我有一个带有指向指针(双指针)的私有指针的类,我用它来创建二维数组。

class Arr2D{
    int **arr;
    public:
        Arr2D(int row, int col){
            arr = new int*[r];
            for(int i = 0; i < row; ++i){
                arr[i] = new int[col];
            }
        }
}

我想在创建它的对象时初始化这个数组,如下所示

int main(){
    Arr2D obj(2,2) = { {1,2}, {3,4} };
} 

如上所示如何初始化数组。

【问题讨论】:

  • 您当前的代码到底发生了什么?
  • @OmidCompSCI 我收到此错误:在“=”之前应为“,”或“;”
  • A int** 不是二维数组。数组最重要的属性之一是它的元素在内存中是连续的。您在这里尝试做的事情是禁止的。使用一维并根据xy 索引计算线性索引。
  • 你有什么理由不能只使用 std::vector 吗?

标签: c++ arrays oop c++11


【解决方案1】:

您可以使用List Initialization 来执行此操作。考虑到您不会创建一个矩阵,而是一个整数列表列表。但是,如果您愿意,可以将其作为矩阵处理。看看这段代码:

# include <iostream>
# include <initializer_list>
# include <vector>

using namespace std;

class Arr2D {
private:
    vector<vector<int>> Arr;

public:
    Arr2D(initializer_list<vector<int>> p) {
        this->Arr = p;
    }

    void Print () {
        for (int i = 0; i < this->Arr.size (); i++) {
            cout << "row " << i << ": [";

            for (int j = 0; j < this->Arr.at (i).size (); j++) {
                cout << this->Arr.at(i).at (j) << " ";
            }

            cout << "]" << endl;
        }
    }
};

int main(int argc, char *argv[]) {
    Arr2D obj {{1, 2, 3}, {4, 5, 6}};

    obj.Print();

    return 0;
}

输出是:

row 0: [1 2 3 ]
row 1: [4 5 6 ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2021-02-22
    • 2021-12-17
    • 1970-01-01
    • 2018-06-26
    相关资源
    最近更新 更多