声明一个大小未知的多维数组
Posted
技术标签:
【中文标题】声明一个大小未知的多维数组【英文标题】:declaring a multidimensional array with unknown size 【发布时间】:2014-01-12 13:52:01 【问题描述】:有人可以向我解释为什么这段代码不起作用,我该如何解决? 谢谢你
int main()
int gridSize;
cout<<"please enter the grid size: ";
cin>>gridSize;
int gridArray[gridSize][gridSize];
【问题讨论】:
在 C++ 中你有std::vector
。使用它。
它不起作用,因为 C++ 不包含 VLA。为了解决这个问题,使用带有小包装器的std::vector
来支持二维寻址。 ***.com/a/12009991/179910
groups.google.com/forum/#!topic/comp.std.c++/K_4lgA1JYeg
请习惯于解释你看到的结果,而不是仅仅说“它不起作用”。
【参考方案1】:
使用std::vector<int>(rows * cols)
甚至std::vector<std::vector<int>>()
。它不起作用,因为 C++ 不支持 VLA。即将发布的技术规范中将提供std::dynarray
s。
【讨论】:
【参考方案2】: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++ 程序员来说都是一个很好的资源。
【讨论】:
非常感谢您的帮助,并为我提供了如此有用的信息【参考方案3】: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_;
;
【讨论】:
我真的很想知道为什么它被否决了,因为如果我需要一张桌子,我会这样做。 1) OP 没有要求一个表,也没有一个类,而只是要求一个动态大小的多维数组。这是 IMO 一个非常详细的解决方案。2) 在常规用例中,我永远不会如果它不是核心功能(例如,用于数据库库),则为此编写一个额外的类,但在我的实现中直接对向量进行操作(隐藏了这一方面)。3)如果我编写这样一个类,我会将其设计为模板,使其支持任意数量的维度,并用单个向量或字节缓冲区适当地实现它。这里的要点很简单 1):没有问,太详细但同时又太笼统以上是关于声明一个大小未知的多维数组的主要内容,如果未能解决你的问题,请参考以下文章
Java--数组概述 & 数组创建和声明 & 数组使用 & 多维数组