-3

私はSTLが初めてで、slistで問題に直面しています。私はスリスタリストを持っています。このスリストから「バージョン」と仮定して、文字列の最後のエントリを削除する必要があります。どうやってやるの。

4

1 に答える 1

1

イテレータが直接指す要素を消去することはstd::slist<T>できません。代わりに、その前にある要素を見つける必要があります。消去する最初の要素を見つけるにはstd::adjacent_find()、述語の最初の引数を使用して無視します。

void erase_value(T const& value, std::slist<T>& l) {
    auto it = std::adjacent_find(l.begin(), l.end(),
        [=](T const&, T const& v) {
            return v == value;
        });
    if (it != l.end()) {
        l.erase_after(it);
    }
}

最後の要素を削除するには、見つけ続ける必要があり、以前に見つかった要素を思い出し、最後に見つかった要素を削除するだけです。つまり、最初の要素を見つけてから、さらに多くの要素が存在する可能性がありますが、検索を続けます。

于 2012-10-03T13:51:35.893 に答える