2016-06-16 9 views
0

リバースイテレータで消去すると何か問題はありますか?以下のコードをコンパイルすると、erase()の引数として 'rit'を使用すると、「一致する関数がありません」というエラーが表示されます。イテレータを逆イテレータとして使用できますか?

std::vector<MyRecord*>* BLV = GetVector; 

for (std::vector<MyRecord*>::iterator it = BLV->begin(); it != BLV->end(); ++it) 
    BLV->erase(it); 
for (std::vector<MyRecord*>::reverse_iterator rit = BLV->rbegin(); rit != BLV->rend(); ++rit) 
    BLV->erase(rit); 
+0

[mcve]を作成して、あなたの質問を読んでいる人が何度も何度も何度もやらなければならないわけではありません。 – nwp

+0

@nwp私は「間違っている」と尋ねましたが、MWEを実行するのではなく、慎重に読むだけでよいと思いました。 – katang

答えて

3

確かにeraseは、逆方向反復子では直接使用できません。基本的に間違った要素が削除された場合は削除します。

ritをフォワードイテレータに変換する必要があります。

(rit + 1).base();は、あなたに相当するitを与えます。慎重に+ 1に注意してください。

一緒にこれを置く、あなたの逆の場合には

BLV->erase((rit + 1).base());

を書きます。

+0

ありがとうございます。それを図書館に組み込むことは価値があると思います。 – katang

関連する問題