0

我想做这样的事情

int n,m; //or cin>>n>>m;

a[n][m];

//then do whatever with the array

问题是 Visual Studio 给了我错误,而 dev c++ 没有。我想在VS中编译它。

4

5 回答 5

2

即使您的编译器支持 VLA(可变长度数组),您也没有a正确声明:

int a[n][m];
^^^

您应该使用std::vector这是一种标准方式

std::vector<std::vector<int> > a(n, std::vector<int>(m));
于 2013-11-13T08:44:01.397 回答
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));
}

对于ints 的二维数组。

但请记住使用后deletefree它。

于 2013-11-13T08:54:35.730 回答
0

即将到来的C++14 标准中提出了可变长度数组,但语言中还没有。

std::vector但是,您可以使用std::vector任何您想要的类型。

喜欢

std::vector<std::vector<int>> a(n, std::vector<int>(m));

上面的声明创建了一个整数向量的向量、大小的外部向量和大小n的内部向量m

于 2013-11-13T08:45:16.053 回答
0

您可以使用 a std::vector<Type>(n*m),这可能是最好的方法。

但是,如果您想保留该数组,我猜如果您通过调用 new/malloc 在堆上而不是堆栈上分配内存,它会编译。但是提醒自己之后要释放内存,并且在执行之前请检查用户输入以防止恶意输入。

于 2013-11-13T08:43:36.573 回答
0

数组需要常量 paras。

相反,您可以使用vector< vector <int> >

于 2013-11-13T08:44:54.990 回答