我想做这样的事情
int n,m; //or cin>>n>>m;
a[n][m];
//then do whatever with the array
问题是 Visual Studio 给了我错误,而 dev c++ 没有。我想在VS中编译它。
即使您的编译器支持 VLA(可变长度数组),您也没有a
正确声明:
int a[n][m];
^^^
您应该使用std::vector
这是一种标准方式
std::vector<std::vector<int> > a(n, std::vector<int>(m));
这取决于编译器......对于这种需要,总是推荐
使用。
但是如果你必须这样做,那么你可以像这样在堆上分配内存......std::vector
使用new
(在 C++ 中推荐)...
cout << "Enter n & m:";
int n, m;
cin >> n >> m;
int** p = new int*[n];
for (int i = 0 ; i < n; i++) {
p[i] = new int[m];
}
或使用malloc
(在 C 中执行。在 C++ 中不推荐)...
cin >> n >> m;
int** p = (int**) malloc (n * (int*));
for (int i = 0; i < n; i++) {
p[i] = (int*) malloc(m * (int));
}
对于int
s 的二维数组。
但请记住使用后delete
或free
它。
即将到来的C++14 标准中提出了可变长度数组,但语言中还没有。
std::vector
但是,您可以使用std::vector
任何您想要的类型。
喜欢
std::vector<std::vector<int>> a(n, std::vector<int>(m));
上面的声明创建了一个整数向量的向量、大小的外部向量和大小n
的内部向量m
。
您可以使用 a std::vector<Type>(n*m)
,这可能是最好的方法。
但是,如果您想保留该数组,我猜如果您通过调用 new/malloc 在堆上而不是堆栈上分配内存,它会编译。但是提醒自己之后要释放内存,并且在执行之前请检查用户输入以防止恶意输入。
数组需要常量 paras。
相反,您可以使用vector< vector <int> >