- ベストアンサー
n × n 二次元配列に vector を突っ込む方法
- n × n の二次元配列に vector を格納する方法を教えてください。
- vecMatrix[ 0 ][ 0 ] に要素を格納しようとすると segmentation fault が発生します。なぜでしょうか。
- n × n の二次元配列に vector を突っ込むためのコードを示してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そりゃ、そうです。 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)
んー、nが固定値なら vector<int> vecMatrix[n][n]; だし、可変値なら vector<vector<vector<int>>> vecMatrix; でしょう。 型の想定がそもそもの間違いの始まりだと思いますが。