• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <vector>

    std::vector::reserve

    void reserve(size_type n);           // (1) C++03
    constexpr void reserve(size_type n); // (1) C++20
    

    概要

    capacityを変更する

    要件

    • T*thisに対してムーブ挿入可能であること (C++14)

    効果

    vectorのサイズが変更されようとしていることを通知し、それによって適宜保持領域の確保を行なわれるようにする。reserve()呼び出しの後、再確保が行われた場合には、capacity()reserve()の引数より大きいか等しくなる。それ以外の場合には、capacity()はこの関数の呼び出し前の値と等しくなる。再確保は、現在の容量がreserve()の引数よりも小さいときに生じ、それ以外の場合には生じない。例外が発生した場合は、非CopyInsertable型のムーブコンストラクタで発生した場合を除き、何も影響を与えない。

    戻り値

    なし

    計算量

    シーケンスのサイズは変更されず、最大シーケンスのサイズに対して線形時間の時間がかかる。

    例外

    n > max_size() の場合には、length_errorが発生する。また、reserve()Allocator::allocate()を内部的に使用し、これにより何らかの例外が発生することがある。

    備考

    再確保された場合にはシーケンス中の要素を指す全ての参照、ポインタ、イテレータが無効になる。reserve()が呼ばれた後は、挿入によってvectorの要素数がcapacity()の値よりも大きくなるまでは、挿入によって再確保が行われないことが保証されている。

    #include <iostream>
    #include <cassert>
    #include <vector>
    
    int main()
    {
      std::vector<int> v;
    
      v.reserve(5); // 5要素(以上)の領域を事前に確保しておく
      assert(v.capacity() >= 5);
    
      // 5要素を超えない限り、要素の追加時にメモリ確保が行われない
      v.push_back(1);
      v.push_back(2);
      v.push_back(3);
    
      for (int x : v) {
        std::cout << x << std::endl;
      }
    }
    

    出力

    1
    2
    3
    

    参照