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

时间:2018-12-06 11:03:41

标签: c++

#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),直到在尝试获取数组输入时发现此错误。 另外请务必告诉我数组初始化是否错误。

2 个答案:

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