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

履歴 編集

function
<forward_list>

std::forward_list::erase_after(C++11)

iterator erase_after(const_iterator position); // (1)
iterator erase_after(const_iterator position,
                     const_iterator last);     // (2)

概要

指定されたイテレータの次の要素をコンテナから削除する

要件

第1引数positionの次が間接参照可能なイテレータであること

  • (1) : positionイテレータが指す次の要素単体を削除する
  • (2) : 範囲(position, last)の要素を削除する

効果

  • (1) : positionが指す次の要素が削除される
  • (2) : (position, last)で示される範囲の要素が削除される

戻り値

削除された要素の次の要素を指すイテレータを返す。そのような要素が存在しない場合は、end()を返す。

例外

投げない

計算量

削除される要素の数と同じ回数のTのデストラクタが実行される。

基本的な使い方 (C++11)

#include <iostream>
#include <forward_list>
#include <iterator>

int main()
{
  // 1引数版
  {
    // 4を削除
    std::forward_list<int> ls = {1, 2, 3, 4, 5};
    ls.erase_after(std::next(ls.before_begin(), 3));
    for (int x : ls) { std::cout << x << ' '; }

    std::cout << std::endl;

    // 先頭要素を削除
    ls = {1, 2, 3, 4, 5};
    ls.erase_after(ls.before_begin());
    for (int x : ls) { std::cout << x << ' '; }
  }
  std::cout << std::endl;

  // 2引数版
  {
    std::forward_list<int> ls = {1, 2, 3, 4, 5};

    // 3以降を削除
    ls.erase_after(std::next(ls.before_begin(), 2), ls.end());

    for (int x : ls) { std::cout << x << ' '; }
  }
  std::cout << std::endl;
}

出力

1 2 3 5 
2 3 4 5 
1 2 

イテレート中に要素を削除する (C++11)

#include <iostream>
#include <forward_list>

int main()
{
  std::forward_list<int> ls = {3, 1, 4};

  // イテレート中に要素削除をするような場合には、
  // 範囲for文は使用できない
  for (auto it = ls.before_begin();;) {
    auto next = std::next(it);
    if (next == ls.end())
      break;

    // 条件一致した要素を削除する
    if (*next == 1) {
      // 削除された要素の次を指すイテレータが返される。
      it = ls.erase_after(it);
    }
    // 要素削除をしない場合に、イテレータを進める
    else {
      ++it;
    }
  }

  for (const auto& x : ls) {
    std::cout << x << std::endl;
  }
}

出力

3
4

バージョン

言語

  • C++11

処理系

参照