所以,我需要创建一个方形矩阵,其大小由用户输入(也填充随机数)。 我试过这个:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int size;
cin >> size;
int arr[] = {};
for (int i = 0; i < size; i++){
cout << endl;
for (int j = 0; j < size; j++){
arr[i][j] = rand() % 10;
cout << arr[i][j] << ' ';
}
}
return 0;
}
但是,每次我的g ++输出都是:
6.cpp: In function ‘int main()’:
6.cpp:12:21: error: invalid types ‘int[int]’ for array subscript
arr[i][j] = rand() % 10;
^
6.cpp:13:29: error: invalid types ‘int[int]’ for array subscript
cout << arr[i][j] << ' ';
我搞砸了哪里?
答案 0 :(得分:0)
首先,您使用的是一维数组,如二维数组。这是错误的。
假设你解决了这个问题, 如果这是C99而不是C ++,那么可变长度数组实际上是可以的。 你可以逃脱
之类的东西/*
get input size
*/
int arr[size][size];
但幸运的是,在C ++(un)中,没有相同样式的可变长度数组。
在经典的C ++中,您必须使用内存分配来创建这样的动态数组,其大小在运行时确定
int size;
cin >> size;
int **arr = new int*[size];
for(int i = 0; i < size; i++) {
arr[i] = new int[size];
}
然而,在更现代的C ++中,SO通常建议您使用向量
vector< vector< int> > arr;
而不是arr[i][j] = rand() % 10;
使用arr[i].push_back(rand() %10)
或者你可以在把东西放到矢量之前resize
。或者,如果您不想在矢量中添加占位符垃圾,则可以使用reserve
。
或者您可以将size
传递给向量的构造函数
vector< vector < int > > arr(size, vector < int > (size));
但需要注意的是,对于小矩阵,矢量矢量的性能明显低于普通旧数组。 (我没有亲自测量指标,但我已经在SO上看到了可靠的指标)
答案 1 :(得分:-1)
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int main(){
int size;
cin >> size;
std::vector<std::vector<int> > arr(size,std::vector<int>(size,0));
for (int i = 0; i < size; i++){
cout << endl;
for (int j = 0; j < size; j++){
arr[i][j] = rand() % 10;
cout << arr[i][j] << ' ';
}
}
return 0;
}