C++ 如何使用erase()和reverse_iterator从向量中删除元素
给定向量,任务是使用erase()和reverse_iterator从该向量中删除一个元素。
例子:
输入: vector = {1, 4, 7, 10, 13, 16, 19},元素 = 16
输出: 1 4 7 10 13 19
输入: vector = {99, 89, 79, 69, 59},元素 = 89
输出: 99 79 69 59
方法:
- 获取向量和要删除的元素
- 在向量上初始化反向迭代器
- 使用base和erase删除所需的元素
使用base的原因:erase()返回a指向在正向意义上刚刚删除的元素之后的元素的新位置,因此我们不能在使用反向迭代器时使用相同的过程,其中我们要朝反向而不是正向前进。而且,我们不能将反向迭代器传递给erase()函数作为参数,否则它会产生编译错误。
反向迭代器只是反转给定迭代器的方向的迭代器。这些反转的操作在基础迭代器上发生。我们可以使用reverse_iterator::base()函数获取该迭代器。事实上,itr.base()和itr之间的关系是: &*(reverse_iterator(itr))==&*(itr-1)
以下是上述方法的实现: