崩溃可以通过以下代码重现。
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> tests;
tests.push_back(1);
tests.erase(tests.rbegin().base());
return 0;
}
如果我使用普通的迭代器,则擦除功能调用不会引起崩溃。有谁知道机制是什么?我会解释一下。
顺便说一下,我尝试使用反向迭代器的原因是,在反向迭代期间删除vector的元素不会在没有附加代码的情况下在删除元素之后跳过对该元素的迭代。
“基本迭代器是指下一个元素(从std :: reverse_iterator :: iterator_type角度)到reverse_iterator当前指向的元素。即&*(rit.base()-1)== &* rit。”https://en.cppreference.com/w/cpp/iterator/reverse_iterator/base