gpt4 book ai didi

c++ - vector::erase 是否不适用于反向迭代器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:29 33 4
gpt4 key购买 nike

下面的代码不会编译

some_vector.erase(some_vector.rbegin(), some_vector.rbegin()+1);

这只是一个例子,我知道删除最后 n 个元素有更好的选择。GCC 告诉我删除没有匹配的功能。我做错了什么或删除不适用于反向迭代器吗?不过,它与前向迭代器一起工作得很好

最佳答案

事实并非如此。但是,反向迭代器提供了一个 base() 方法来获取正向迭代器。请注意,返回的正向迭代器指向反向迭代器指向的元素之后的元素。

或者,换句话说,.rbegin().base() == .end().rend().base() == .begin()

所以固定代码看起来像这样:

some_vector.erase(
(++(some_vector.rbegin())).base(),
some_vector.rbegin().base()
);

请注意,我们必须交换迭代器的顺序,因为它们是反向迭代器;第二个参数必须是序列中第一个迭代器之后的迭代器,但如果不交换反向迭代器的顺序,这就不是真的。因此,如果我们有两个反向迭代器 ab,并且 b >= a 那么我们可以将这个习惯用法用于 erase() :

container.erase(b.base(), a.base());

更一般地,它适用于反向迭代器范围 [a, b) 范围 [b.base(), a.base()) 以相反的顺序迭代相同的元素序列。

关于c++ - vector::erase 是否不适用于反向迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44037804/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com