我想做这样的事情
int n,m; //or cin>>n>>m;
a[n][m];
//then do whatever with the array
问题是Visual Studio给了我错误,而dev c ++却没有。我想在VS中编译它。
答案 0 :(得分:2)
即使你的编译器支持VLA(可变长度数组),你也没有正确地声明a
:
int a[n][m];
^^^
您应该使用std::vector
这是一种标准方式
std::vector<std::vector<int> > a(n, std::vector<int>(m));
答案 1 :(得分:1)
这取决于编译器......
始终建议使用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
。
答案 2 :(得分:0)
您可以使用std::vector<Type>(n*m)
,这可能是最好的方式。
如果你想继续使用数组,我想如果你通过调用new / malloc在Heap而不是堆栈上分配内存,它会编译。但请注意事后释放内存,请在用户输入之前检查以防止恶意输入。
答案 3 :(得分:0)
数组需要常数寄生。
instaead,您可以使用vector< vector <int> >
答案 4 :(得分:0)
Variable length arrays在即将到来的C++14 standard中提出,但尚未使用该语言。
但是,您可以使用std::vector
std::vector
您想要的任何类型。
像
std::vector<std::vector<int>> a(n, std::vector<int>(m));
上述声明创建了一个整数向量的向量,大小为n
的外向量和大小为m
的内向量。