[当进行反向迭代时使用擦除操作删除向量的第一个元素时,这是由于超出范围导致的崩溃

问题描述 投票:0回答:1

崩溃可以通过以下代码重现。

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    vector<int> tests;
    tests.push_back(1);
    tests.erase(tests.rbegin().base());
    return 0;
}

如果我使用普通的迭代器,则擦除功能调用不会引起崩溃。有谁知道机制是什么?我会解释一下。

顺便说一下,我尝试使用反向迭代器的原因是,在反向迭代期间删除vector的元素不会在没有附加代码的情况下在删除元素之后跳过对该元素的迭代。

c++ stl
1个回答
0
投票

“基本迭代器是指下一个元素(从std :: reverse_iterator :: iterator_type角度)到reverse_iterator当前指向的元素。即&*(rit.base()-1)== &* rit。”https://en.cppreference.com/w/cpp/iterator/reverse_iterator/base

© www.soinside.com 2019 - 2024. All rights reserved.