方阵矩阵机智"无效类型'int [int]'用于数组下标"产量

时间:2018-05-08 17:05:34

标签: c++ arrays

所以,我需要创建一个方形矩阵,其大小由用户输入(也填充随机数)。 我试过这个:

#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] << ' ';

我搞砸了哪里?

2 个答案:

答案 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;
}