[解決済み] C++による多次元ベクトル
2022-03-06 16:48:27
質問
C++を学び始めたばかりです。多次元配列とベクトルの構文を把握しようとしていたところ、かなり混乱し始めました。多次元配列を初期化する方法はわかりました。それは簡単なようです。 行の後に列が続きます。しかし、ベクターはもう少し難しいです。同じように初期化しなければならないのでしょうか、それともベクトルのベクトルを作成しなければならないのでしょうか?
どのように解決するのですか?
C++11が使えるようになれば、多次元配列やベクトルのベクトルも同様の方法で初期化できるようになります。
int a1[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> a2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
しかし、未定義の動作に陥ることなく要素にアクセスするためには、理解しなければならない相違点があります。
多次元配列の場合、配列の要素に対応するメモリは連続的に確保する必要があります。ベクターのベクターでは、要素のメモリはばらばらになることがほとんどです。
のメモリ
a1
:
a1[0][0] a1[1][0] a1[2][0]
| | |
v v v
+---+---+---+---+---+---+---+---+---+
| | | | | | | | | |
+---+---+---+---+---+---+---+---+---+
のメモリ
a2
(最も可能性が高い)。
a2[0][0]
|
v
+---+---+---+
| | | |
+---+---+---+
a2[1][0]
|
v
+---+---+---+
| | | |
+---+---+---+
a2[2][0]
|
v
+---+---+---+
| | | |
+---+---+---+
また、各行の列数が同じでないベクトルも定義可能です。
std::vector<std::vector<int>> a2 = { {1, 2, 3}, {4, 5}, {6, 7, 8, 9} };
多次元配列では、各行で列の数が同じであることが保証されています。
上記の多次元配列が与えられたとき
a1
,
a1[1][2]
は有効な要素であり
a1[2][3]
は無効な要素になります。ベクトルのベクトルの場合、上の行を使うと
a2[1][2]
は有効な要素ではなく
a2[2][3]
は有効な要素です。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] C++で配列はどのように使うのですか?
-
[解決済み] PHP 多次元配列の値による検索
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】'std::cout'への未定義の参照