C++ 如何在创建类和类的对象时初始化类内的二维数组
我有一个带有指向指针的私有指针(双指针)的类,我正在使用它创建一个2D数组C++ 如何在创建类和类的对象时初始化类内的二维数组,c++,arrays,oop,c++11,C++,Arrays,Oop,C++11,我有一个带有指向指针的私有指针(双指针)的类,我正在使用它创建一个2D数组 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]; } }
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];
}
}
}
如何初始化如上所示的数组。您可以使用。假设你不是在创建一个矩阵,而是一个整数列表。但如果你愿意,你可以把它当作矩阵来处理。请看下面的代码:
# 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;
}
您当前的代码到底发生了什么?@OmidCompSCI我收到了这个错误:预期为“,”或“;”在“=”之前,A
int**
不是2d数组。数组最重要的特性之一是其元素在内存中是连续的。你在这里试图做的是否定的。使用一维,从x
和y
索引计算线性索引。有什么原因不能只使用std::vector吗?@Abhishek看一看
# 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 ]