• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:n × n の二次元配列の各要素に vector を突っ込みたいと思っ)

n × n 二次元配列に vector を突っ込む方法

このQ&Aのポイント
  • n × n の二次元配列に vector を格納する方法を教えてください。
  • vecMatrix[ 0 ][ 0 ] に要素を格納しようとすると segmentation fault が発生します。なぜでしょうか。
  • n × n の二次元配列に vector を突っ込むためのコードを示してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

そりゃ、そうです。 vecMatrix[ i ] = new vector<int>*[ n ]; では 「vector<int>へのポインタ」の配列が用意されるだけで、そのポインタが指ししめすところの「vector<int>」がありません。 そこにアクセスしに行けば、エラーになっても不思議ではありません。 このやり方をするなら、全てのvecMatrix[i][j]についてvector<int>を割り当てる必要があります。 for (i = 0 ; i < n ; i++) { vecMatrix[ i ] = new vector<int>*[ n ]; for(int j= 0 ; j < n ; ++ j ) { vecMatrix[ i ][j] = new vector<int>() ; } } 当然、解放も一つずつやるのをお忘れなく。 それか vector<int> **vecMatrix; vecMatrix = new vector<int>*[ n ]; for (i = 0 ; i < n ; i++) vecMatrix[ i ] = new vector<int>[ n ]; なら、デフォルトコンストラクタで初期化されたvector<int>の配列になるので vecMatrix[ 0 ][ 0 ].push_back( 1 ); で大丈夫なはず。 それか、いっそ、 vector<vector<vector<int>>> と入れ子にしてしまうか。

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

んー、nが固定値なら vector<int> vecMatrix[n][n]; だし、可変値なら vector<vector<vector<int>>> vecMatrix; でしょう。 型の想定がそもそもの間違いの始まりだと思いますが。

関連するQ&A