私は状況があります。私は私の仕事の一つにテンプレート関数を使用しました。この関数には、イテレータを参照渡しします。今、私はベクトルからいくつかの要素を削除する必要があります。どのようにイテレータだけを使ってこれを行うのですか?それぞれのコードを見つける:ベクトルを知らずにイテレータを使用して要素を削除
template <class BidirectionalIterator, class Iterator> bool
SomeFunc(BidirectionalIterator& first, BidirectionalIterator& last, Iterator anotherVecBegin)
{
while((first+1) != last)
{
if(some_condition)
// delete (first); HOW?
else if(some_other_condition)
// delete (first + 1); HOW?
}
// add something to another vector using anotherVecBegin
return true;
}
多くの質問がありますが、それらはすべてコンテキスト内のベクトルを持っています。だからmyVec.erase(*first)
は簡単です..
私は、それが私がイテレータを参照して渡す非常に良い方法ではないことも承知しています。しかし、私は単純なルールに従っています。何かが変更されることが予想されるときに参照を使用するか、重複コピーを避けるためです。私のシナリオは最初の条件に合っています。
だから私はどのように削除しますか?
['std :: erase(std :: remove_if())' idiom](http://en.cppreference.com/w/cpp/)を参照してください。アルゴリズム/削除) – YSC
@YSC 'std :: erase'とは思えません。要は、 'std :: vector :: erase'を呼び出す' std :: vector'インスタンスが必要です。 – juanchopanza
@juanchopanzaここにはありません。私は編集することはできません。月曜日の朝の誤字。 – YSC