

**エラーメッセージ:**

[code]

    これらのオペランドと一致する演算子 ">>" はありません 
    -- オペランドの型: std::istream >> graphC/C++(349)
    
[/code]

**ソースコード:**

[code]

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
      int h, w;
      vector<vector<int>> P[9][10001];
      cin >> h >> w;
      for(int i=1; i <= h; i++){
        for(int j=1; j <= w; j++) cin >> P[i][j]; // この行の >> 部分にエラーが起きます。
      }
      return 0;
    }
    
[/code]


CC BY-SA 4.0
2021-07-27T23:15:08.663
78434
2021-07-29T07:19:17.087
2021-07-28T00:30:17.107
3060
47471
question
c++
c++のvectorへの入力ができません。


題意的に、求めるものは「配列の配列」２次元配列であった模様。

`std::vector<T> v1;` とするとそれだけで `v1` は可変長配列です（この表記では要素数０）  
`std::vector<std::vector<T> > v2;` とすると `v2`
は「可変長配列を要素とする可変長配列」です（要素数０の配列が０個あるだけなので、これだけでは実用できません）

なので `std::vector<std::vector<int> > v3[9][10001];`
は「「可変長配列を要素とする可変長配列」の「固定長配列の固定長配列」」ということになり４次元配列となってしまいます。

固定長二次元配列が欲しいなら回答は `int P[9][10001];` ということになります。

* * *

以下余談

明日のための第一歩： `std::vector<int> vec(10001);` と [c](/questions/tagged/c "'c'
のタグが付いた質問を表示") 互換配列 `T arr[10001];`
では記憶装置上のメモリ配置が異なることは意識しておきましょう。これがイメージできるようになったら

明日のための第二歩： `std::vector<std::vector<int> > v2;`
のメモリ配置がどうなっているのかイメージできるようになりましょう。そうしたら `v2` の要素数を増やす際にどんなコードが必要か理解できると思います。

* * *

更に余談  
Win32 (x86) においてデフォルトスタックサイズは 1MiB  
`int P[9][10001];` はこれだけで 351.6KiB  
なので自動変数として `P` を２つ作るのがせいぜいで３つ作ることはできません。 `vector`
ならメモリの許す限り何個でも作れますので、将来をにらむなら `vector` を正しく使い方法を今のうちに学んでおくことも悪くないです。でも YAGNI
則に基づき普通の自動変数としておくのもよい選択肢です。

将来 [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") でメシ喰えるようになるには
`#include <bits/stdc++.h>` とか、大域 `using namespace std;`
のような悪癖をマネしないようにしませう。この書き方は競技プログラミング業界固有の非標準なものです。オイラの部下がこんなこと書いてたらソースコードレビューの場で突っ返します。


CC BY-SA 4.0
2021-07-29T01:03:49.197
78451
2021-07-29T07:19:17.087
2021-07-29T07:19:17.087
8589
8589
78434
answer