gpt4 book ai didi

c++ - 多维数组作为具有任意边界的类成员

转载 作者:行者123 更新时间:2023-11-28 06:21:08 24 4
gpt4 key购买 nike

不是 C++: multidimensional array initialization in constructor 的拷贝因为所有答案似乎都假设边界在编译时已知。

我正在制作一个加权无向图类 arraygraph , 由 int 的二维数组支持, 名为 edges[][] .在实例化时我真的不在乎什么edges[][]持有; arraygraph有一个从给定文件名和 edges 读取图形的方法设置为 new int[n][n] (其中 n 是文件中的节点数)在填充之前由该函数执行。

问题是,g++ 似乎不喜欢我定义 edges[][] 的方式.它想要为数组设置边界,而在编译时我不知道边界。我应该重新定义 edges 吗?作为int * ?或者作为 edges[][0] ?还是完全不同?

我无论如何都不是 C++ 专家(我有点喜欢 Python)如此复杂、重量级的选项,如 Array with undefined size as Class-member 中的选项有点超出范围(肯定有比 that... 更简单的方法)。如果我正在尝试做的事情完全是错误的,那么知道这也是一件有用的事情,而且知道我应该做什么会很方便。

最佳答案

C++ 不知道变长数组。因此,您需要定义具有恒定大小的数组。重新定义数组也是不可能的。

多维数组的两个选项:

  • 数组的动态数组,实现为int **edges
  • std::vector 又名 vector<vector<int>> edges;

如果您需要复制数据(在一条语句中完成)或更改大小, vector 会非常方便。所以我推荐第二个选项:

int N=10; // dynamic! 
vector<vector<int>> m(N, vector<int>(N));

使用指针的替代方法是:

int N=10; // dynamic! 
int**m = new int*[N]; // allocate the first array
for (int i = 0; i < N; i++) { // allocate the second arrays
m[i] = new int[N]{};
}

在这两种情况下,您将使用相同的语法访问数据:

for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
cout << m[i][j] << "\t";
cout << endl;
}

关于c++ - 多维数组作为具有任意边界的类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com