使用反向迭代器擦除有什么问题吗?在编译下面的代码片段时,当使用'rit'作为erase()
的参数时,我收到'无匹配函数'错误。
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 :(得分:3)
确实erase
不能直接与反向迭代器一起使用;如果允许的话,你基本上要删除错误的元素。
您需要将rit
转换为转发迭代器。
(rit + 1).base();
会为您提供等效的it
。请仔细注意+ 1
。
把它们放在一起,写下
BLV->erase((rit + 1).base());
反之。