无法通过矢量输入 2D 数组。错误:操作员不匹配>>


#include<iostream>
#include<vector>
using namespace std;
int check(vector<int>,int );
int i,j;
int main()
{
int T,N,M,E,Sr,Sc,Tr,Tc;
int & en = E;
// &en = &E;
std:: vector<int>  a[100][100];
cin>>T;
for(int x=1;x<T;x++)
{
cin>>N>>M>>E>>Sr>>Sc>>Tr>>Tc;
//cin.ignore();
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{cin>>a[i][j];}  //contains error 
}          

我正在解决Google Kickstart问题(CaveEscape(,直到我在尝试获取数组输入时发现这个错误。另外,请告诉我的数组初始化是否错误。

您的向量声明可疑。

看起来你是从int的2D阵列开始的:

int a[100][100];

那就好了。

然后你把它变成了一个向量,但你把它做成了一个二维向量数组!

你不能直接从流中读取向量(数组元素之一(,因为你没有告诉计算机你希望它如何做到这一点(而读取int是它已经知道如何做到的(。

由于实际的2D矢量是愚蠢的,并且在1D矢量上有2D立面对于这个简单的任务来说似乎太复杂了,所以我建议您回到沼泽标准阵列。

然而,如果你对一个向量一筹莫展,它会看起来像这样:

std::vector<int> a(100*100);
// i×j is a[i + j*100]

或者:

std::vector<std::vector<int>> a(100, std::vector<int>(100));
// i×j is a[i][j]
// ew though! poor cache locality, no contiguity, and lots of dynamic allocations

(免责声明:我可能已经在最后的例子之间翻转了行和列,没有大脑能力或倾向于解决它,因为这无关紧要,因为你不应该采取这种方法:p(

您对2D矢量的实现是错误的。2D矢量可以实现为矢量的矢量,例如:

std::vector<std::vector <int> >  a;

以下是使用以下格式从用户获取输入的示例代码:

#include<iostream>
#include<vector>
using namespace std;
int check(vector<int>, int);
int i, j;
int main()
{
int T, N, M, E, Sr, Sc, Tr, Tc;
int & en = E;
// &en = &E;
std::vector<std::vector <int> >  a;
cin >> T;
for (int x = 1; x < T; x++)
{
cin >> N >> M >> E >> Sr >> Sc >> Tr >> Tc;
//cin.ignore();
for (int i = 0; i < N; i++)
{
vector<int> b;
for (int j = 0; j < M; j++)
{
int temp;
cin >> temp;
b.push_back(temp);
}
a.push_back(b);
}
}
}

相关内容

最新更新