最終更新日時: 2022年10月06日 16時13分02秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<vector>

# std::vector::clear

    void clear();           // (1) C++03
    constexpr void clear(); // (1) C++20

## 効果

全ての要素を削除する。

また、要素を指す全ての参照、ポインタ、イテレータが無効になる。past-the-end イテレータも無効になることがある。

## 戻り値

なし

## 例外

投げない

## 事後条件

`empty() == true`

## 計算量

線形時間。全ての要素に対してデストラクタを呼び出す。

## 例

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

    int main()
    {
      std::vector<int> v = {1, 2, 3};

      v.clear();

      assert(v.empty());

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

### 出力

## 参照

- LWG Issue 2231. DR 704 removes complexity guarantee for `clear()`
  - C++03までこの関数の効果は`erase(begin(), end())`だったため、それによって線形時間の計算量が保証されていたが、C++11で効果の表記が変わったために、保証がなくなってしまっていた。C++14であらためて保証を追加。
- P1004R2 Making `std::vector` constexpr