Skip to content

Latest commit

 

History

History
75 lines (53 loc) · 2.54 KB

File metadata and controls

75 lines (53 loc) · 2.54 KB

reserve

  • vector[meta header]
  • std[meta namespace]
  • vector[meta class]
  • function[meta id-type]
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;
  }
}
  • capacity()[link capacity.md]
  • push_back[link push_back.md]

出力

1
2
3

参照