最終更新日時(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

参照