名前空間
変種
操作

std::list::erase

提供: cppreference.com
< cpp‎ | container‎ | list
(1)
iterator erase( iterator pos );
(C++11以前)
iterator erase( const_iterator pos );
(C++11およびそれ以降)
(2)
iterator erase( iterator first, iterator last );
(C++11以前)
iterator erase( const_iterator first, const_iterator last );
(C++11およびそれ以降)

コンテナから指定された要素を削除します。

1) pos の指す要素を削除します。
2) 範囲 [first; last) 内の要素を削除します。

削除された要素への参照およびイテレータは無効化されます。 それ以外の参照およびイテレータは影響を受けません。

イテレータ pos は有効かつ逆参照可能でなければなりません。 そのため end() イテレータは (有効であるが逆参照可能でないため) pos の値として使用することはできません。

first==last の場合、イテレータ first は逆参照可能である必要はありません。 空範囲の削除は何もしません。

目次

[編集] 引数

pos - 削除する要素を指すイテレータ
first, last - 削除する要素の範囲

[編集] 戻り値

削除された最後の要素の次のイテレータ。 イテレータ pos が最後の要素を指す場合は end() が返されます。

[編集] 例外

(なし)

[編集] 計算量

1) 一定。
2) firstlast の距離に比例。

[編集]

#include <list>
#include <iostream>
#include <iterator>
 
int main( )
{
    std::list<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    c.erase(c.begin());
 
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    std::list<int>::iterator range_begin = c.begin();
    std::list<int>::iterator range_end = c.begin();
    std::advance(range_begin,2);
    std::advance(range_end,5);
 
    c.erase(range_begin, range_end);
 
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    // Erase all even numbers (C++11 and later)
    for (auto it = c.begin(); it != c.end(); ) {
        if (*it % 2 == 0) {
            it = c.erase(it);
        } else {
            ++it;
        }
    }
 
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
}

出力:

0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 6 7 8 9
1 7 9

[編集] 関連項目

すべての要素を削除します
(パブリックメンバ関数) [edit]