c++ - 无法通过 vector 输入二维数组。错误 : no match for operator>>

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

最佳答案

您的 vector 声明有问题。

看起来您是从 int 的二维数组开始的:

int a[100][100];

这样就好了。

然后你把它变成了一个 vector ,但是你把它变成了一个二维 vector 数组!

您不能从流中直接读入 vector (您的数组元素之一),因为您没有告诉计算机您希望它如何执行此操作(而读入 int 是它已经知道该怎么做的事情)。

由于实际的 2D vector 是愚蠢的,并且在 1D vector 上有 2D 立面对于这个简单的任务来说似乎太复杂了,我建议你转回沼泽标准数组。

但是,如果你死定了一个 vector ,它看起来像这样:

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)

关于c++ - 无法通过 vector 输入二维数组。错误 : no match for operator>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649988/

相关文章:

c# - Dll将 C++ DLL 导入到 C# 应用程序中,BYTE * p

c++ - 如何使用 ADO 和 C++ 将 null 传递给存储过程输入参数

c++ - 有什么方法可以定义动态数组而无需确定其大小

c++ - 链表反向而不使用循环?

android - 在 Android 上使用 OpenSL 从内存中播放 PCM WAVE 声音

c++ - C 执行期间记录错误

C++ 检查枚举标志

c++ - 列出矩阵类的初始化

c++ - sizeof(struct) 返回意外值

c++ - 检索用户路径环境变量