双精度数组作为用户输入

时间:2013-11-13 08:40:48

标签: c++ arrays

我想做这样的事情

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

a[n][m];

//then do whatever with the array

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

5 个答案:

答案 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的二维数组。

但请记住在使用后deletefree

答案 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的内向量。