最終更新日時:
が更新

履歴 編集

function
<vector>

std::vector::resize

void resize(size_type sz);             // (1) C++11
void resize(size_type sz, const T& c); // (2) C++11
void resize(size_type sz, T c = T());  // (1) + (2) C++03

要件

要素数を変更する

要件

  • (1) :

    • Tがデフォルト構築可能であること (C++14)
    • T*thisに対してコピー挿入可能であること (C++11まで)
    • T*thisに対してムーブ挿入可能であること (C++14)
  • (2) :

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

効果

  • (1) :

    • もしszが現在のコンテナのsize()より小さい場合、以下の動作をする:
    • もしszが現在のコンテナのsize()より大きい場合、sz - size()個だけ値初期化されたT型オブジェクトのコピーを追加する。
  • (2) :

    • C++11まで

    if (sz > size())
      insert(end(), sz - size(), c);
    else if (sz < size())
      erase(begin() + sz, end());
    

    • C++14以降
      • もしszが現在のコンテナのsize()より小さい場合、pop_back()関数をsize() - sz回呼ぶ
      • もしszが現在のコンテナのsize()より大きい場合、sz - size()個だけオブジェクトcのコピーを追加する。

戻り値

なし

備考

  • (2) : 非コピー挿入可能な型Tのムーブコンストラクタが例外を送出した場合、この関数は何もしない。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
  // 増加
  {
    std::vector<int> v = {3, 1, 4};
    v.resize(5);

    std::for_each(v.begin(), v.end(), [](int x) { std::cout << x << std::endl; });
  }
  std::cout << std::endl;

  // 減少
  {
    std::vector<int> v = {3, 1, 4};
    v.resize(1);

    std::for_each(v.begin(), v.end(), [](int x) { std::cout << x << std::endl; });
  }
}

出力

3
1
4
0
0

3

参照