#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),直到在尝试获取数组输入时发现此错误。 另外请务必告诉我数组初始化是否错误。
答案 0 :(得分:1)
您的向量声明是可疑的。
您似乎是从int
的2D数组开始的:
int a[100][100];
那会没事的。
然后将其转换为向量,但将其制成向量的2D数组!
您不能从流中直接读取到向量(数组元素之一)中,因为您没有告诉计算机您希望它如何执行此操作(而读入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)
答案 1 :(得分:1)
您对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);
}
}
}