【发布时间】:2021-08-23 18:57:07
【问题描述】:
我刚刚开始使用 C++,我试图在一个类中初始化一个数组,其长度取决于“s”参数。有人能告诉我最简单的方法吗?
#include<iostream>
using namespace std;
class Game{
public:
int size;
int grid[size][size]; // This is where the error occurs.
Game(int s){
size = s;
}
};
int main(){
Game g(10);
return 0;
}
【问题讨论】:
-
你说“非固定”的那一刻,等同于动态容器。最常见的是
std::vector。在你的情况下,std::vector<std::vector<int>> grid;可能会做你想做的事,由Game(int s) : grid(s, std::vector<int>(s)) {}初始化 -
请注意
std::vector<std::vector<int>>不是一个“二维数组”,而是一个分散的数组数组。它非常效率低下,并且它本身不维护基本不变量(例如“所有行具有相同的列数”)。一个合适的解决方案是创建一个简单的二维数组类。 -
没有办法“在 C++ 中初始化一个非固定长度的数组”,原因很简单,因为没有“C++ 中的非固定长度数组”之类的东西。 C++ 不能以这种方式工作。
-
对,在c++中,当你需要一个在编译时不知道大小的数组时,你一般使用
std:vector,二维网格不一定需要嵌套它们,你会发现很多类似问题的答案在这里。在c++中init,declare和define意思不同,我的建议是在养成坏习惯之前先在好书上学习基础知识 -
我同意@spectras:
std::vector之上的包装类是最可行的解决方案。但请注意,所有 N 维数组实际上都由 RAM 支持,这基本上是一个大的 1D 数组,因此调整任意大小的 N 维会产生重新分配存储和移动元素到新的开销布局。在方形/立方体/超立方体数组的情况下,可以通过将每个新行/列完全放入后备向量的尾部来大大优化。