有人可以向我解释为什么这段代码不起作用,我该如何解决它? 谢谢声明一个未知大小的多维数组
int main()
{
int gridSize;
cout<<"please enter the grid size: ";
cin>>gridSize;
int gridArray[gridSize][gridSize];
}
有人可以向我解释为什么这段代码不起作用,我该如何解决它? 谢谢声明一个未知大小的多维数组
int main()
{
int gridSize;
cout<<"please enter the grid size: ";
cin>>gridSize;
int gridArray[gridSize][gridSize];
}
使用std::vector<int>(rows * cols)
甚至std::vector<std::vector<int>>()
。它不起作用,因为C++不支持VLA。在即将到来的技术规范中将会提供std::dynarray
。
好的,非常感谢:) – Alladin
class Table
{
public:
Table(int rows, int cols)
{
tab_.resize(rows);
for (auto& row : tab_)
{
row.resize(cols);
}
}
vector<int>& operator[](int row) { return tab_[row]; }
private:
vector<vector<int> > tab_;
};
std::vector
是做类似的东西常用的手段,但如果你手工是在明知只关心如何把它:
int main()
{
int gridSize;
std::cout << "Enter size of grid: ";
std::cin >> gridSize;
int** gridArray = new int*[gridSize];
for (int i = 0; i < gridSize; i++)
{
std::cout << std::endl << i << std::endl;
gridArray[i] = new int[gridSize];
}
}
基本上,你正在使用指针数组的指针,然后设置第二个维度。但是,如果你这样做,你将不得不手动delete
的内存,以避免泄漏。 再次,这种方式不建议,只提供技术诀窍
Parashift's C++ FAQ为任何新的/适中的C++程序员一个很好的资源。
确定thx对于你的帮助很大,并且为了给我这样的有用的信息 – Alladin
在C++中,你有['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。用它。 –
它不起作用,因为C++不包含VLA。要解决它,使用'std :: vector'和一个小包装器来支持2D寻址。 http://stackoverflow.com/a/12009991/179910 –
https://groups.google.com/forum/#!topic/comp.std.c++/K_4lgA1JYeg – Maroun