C++ベクトルのreserve()メソッドの用途は何か

Vectorクラスのreserve()メソッドでは、将来的な挿入操作による不必要な再割り当てや要素のコピーを回避するために、ある程度のメモリ領域を事前に確保できます。構文は次のとおりです。

void reserve(size_type n);

ここで、n は予約された要素数であり、size_type は vector クラスで定義された符号なし整数型である。

reserve() 関数を使うと、ベクターの領域を事前に確保することができますが、ベクターのサイズは変更されません。挿入される要素の数が現在確保されている領域を超えると、ベクターは自動的に領域を再確保します。

reserve()関数の主な利点は、ベクトルに要素を挿入する際のメモリの再割り当てを削減し、挿入効率を向上させることです。十分なメモリ領域を事前に確保することで、頻繁なメモリ割り当てとコピー操作を回避し、時間とリソースを節約できます。

reserve()関数の使い方は次のとおりです。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector;
    
    // 预留10个元素的内存空间
    myVector.reserve(10);
    
    // 插入元素
    for (int i = 0; i < 20; i++) {
        myVector.push_back(i);
    }
    
    // 输出元素数量和容量
    std::cout << "Size: " << myVector.size() << std::endl;
    std::cout << "Capacity: " << myVector.capacity() << std::endl;
    
    return 0;
}

本結果はネイティブによる表現であり、唯一の選択肢を必要とします。

Size: 20
Capacity: 20

insertで20個の要素を加えてもベクトルの容量が確保されている10個を超えないのは、reserve()関数があらかじめ十分なメモリ領域を確保しておき、メモリの再割り当てのオーバーヘッドを避けているためです。

bannerAds