以下代码无法编译。
some_vector.erase(some_vector.rbegin(), some_vector.rbegin()+1);
这只是一个例子,我知道删除最后n个元素有更好的选项。GCC告诉我没有匹配的erase函数。我做错了什么,还是erase在反向迭代器上不起作用?不过它对于前向迭代器来说工作得很好。
不会。但是,反向迭代器提供了一个base()
方法来获取正向迭代器。请注意,返回的正向迭代器指向的是反向迭代器所指向的元素之后的元素。
或者换句话说,.rbegin().base() == .end()
和.rend().base() == .begin()
因此,修复后的代码应该像这样:
some_vector.erase(
(++(some_vector.rbegin())).base(),
some_vector.rbegin().base()
);
container.erase(b.base(), a.base());