可以将反转迭代器用作普通迭代器吗?

时间:2016-06-16 08:29:32

标签: c++ iterator

使用反向迭代器擦除有什么问题吗?在编译下面的代码片段时,当使用'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);

1 个答案:

答案 0 :(得分:3)

确实erase不能直接与反向迭代器一起使用;如果允许的话,你基本上要删除错误的元素。

您需要将rit转换为转发迭代器。

(rit + 1).base();会为您提供等效的it。请仔细注意+ 1

把它们放在一起,写下

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

反之。