[解決済み] C++におけるstd::vectorとstd::arrayの比較
質問
との違いは何ですか?
std::vector
と
std::array
をC++で使うことはできますか?どのような場合にどちらを優先すべきでしょうか?それぞれの長所と短所は何でしょうか?私の教科書では、それらがどのように同じであるかを列挙しているだけです。
解き方は?
std::vector
は、動的な配列である
1
ヒープに格納され、要素が追加または削除されると自動的に成長または縮小します。これは,すべてのフック(
begin()
,
end()
イテレータなど)があり、STLの他の部分とうまく動作します。また、通常の配列では面倒な操作、例えばベクトルの途中に要素を挿入する(後続の要素を移動させる作業はすべて裏で処理される)ような操作を可能にする便利なメソッドもいくつか持っています。
ヒープ上に確保したメモリに要素を格納するため、静的配列と比較して若干のオーバーヘッドが発生します。
std::array
は、静的なサイズの配列をカプセル化したテンプレートクラスで、オブジェクト自身の内部に格納されます。つまり、このクラスをスタック上でインスタンス化すると、配列自体もスタック上に存在することになります。この配列のサイズはコンパイル時に知る必要があり(テンプレート・パラメータとして渡されます)、成長したり縮小したりすることはできません。
よりも制限されています。
std::vector
しかし、実際には C スタイルの配列の軽量ラッパーであるため、特に小さいサイズではより効率的であることが多いのです。しかし,暗黙のうちにポインタに変換することができないため,より安全であり,STLに関連する機能の多くを提供します.
std::vector
や他のコンテナのように、STLアルゴリズムやamp; coで簡単に使用することができます。いずれにせよ、固定サイズという制限のために、このコンテナは
std::vector
.
への導入は
std::array
をご覧ください。
この記事
を簡単に紹介します。
std::vector
とその上で可能な操作については、その
ドキュメント
.
-
実際、標準では異なる操作の最大複雑度(例えば、一定時間でランダムアクセス、線形時間で全要素の反復処理、一定償却時間で末端の要素の追加と削除など)で記述されていると思いますが、AFAIKでは動的配列を使う以外にそのような要件を満たす方法はないでしょうね。Lucretiel が述べているように、実際には規格では要素が連続的に格納されることが要求されていますので それは 動的な配列で、関連するアロケータがそれを置く場所に格納されます。
関連
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] 新しい配列を作成せずに、既存のJavaScript配列を別の配列で拡張する方法
-
[解決済み】JavaScriptで2つの配列を結合し、項目の重複を排除する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] 配列のベクトルを扱う正しい方法