ホームページ > バックエンド開発 > C++ > `std::vector::reserve()` と `std::vector::resize()`: 効率的なメモリ管理のためにどちらを使用する場合?

`std::vector::reserve()` と `std::vector::resize()`: 効率的なメモリ管理のためにどちらを使用する場合?

Patricia Arquette
リリース: 2024-12-21 03:46:09
オリジナル
881 人が閲覧しました

`std::vector::reserve()` vs. `std::vector::resize()`: When to Use Which for Efficient Memory Management?

std::vector::resize() と std::vector::reserve()

C では、 std:: Vector は、同じ型の要素を格納するためによく使用されるコンテナです。メモリ内で異なる役割を果たす 2 つのメソッド std::vector::reserve()std::vector::resize() を提供します。 Management.

std::vector::reserve()

  • ベクトルの論理サイズを変更せずに、指定された数の要素にメモリを割り当てます。
  • 将来のプッシュバックまたは挿入が再割り当てなしで対応できることを保証しますメモリ。
  • ベクトルのサイズ変更や要素の変更は行いません

std::vector::resize()

  • 要素を追加または削除して、ベクトルを指定されたサイズにサイズ変更します。必要です。
  • 新しく追加された要素をデフォルト値で初期化します。
  • ベクトルのメモリが再割り当てされ、既存の参照、イテレータ、またはポインタが無効になる可能性があります。

提供されたコード内のアプリケーション

指定されたサンプル内コードでは、メンバー ベクトル my_member は、最初に std::vector::reserve() を使用して n_dim 要素にメモリを割り当てられます。ただし、要素は初期化されず、現在の論理サイズ (0) を超える要素にアクセスすると、未定義の動作またはエラーが発生します。

要素をベクターに書き込むには、std::vector::resize() を次のようにする必要があります。使用済み。この場合、ベクトルのサイズを n_dim に変更し、すべての要素をゼロに初期化します。

VS2010 SP1 の動作

提供されたテスト コードは、次の理由により、VS2010 SP1 でのデバッグ ビルドに失敗します。論理サイズが 0 のみのベクトルの要素 5 にアクセスしようとします。これは未定義の動作および結果とみなされます。デバッグ モードでクラッシュします。

結論

提供された情報に基づくと、要素が必要な場合は std::vector::resize() を使用するのが正しいです。ベクトルに書き込まれます。 std::vector::reserve() は、将来の挿入が発生することがわかっていて、それらのために事前にメモリを予約する必要があるが、要素の値を前もって初期化する必要がない場合に使用する必要があります。

以上が`std::vector::reserve()` と `std::vector::resize()`: 効率的なメモリ管理のためにどちらを使用する場合?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート