利用reverse_iterator删除string末尾元素

先看代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string str = "Uranux~";
	string::reverse_iterator strRIter = str.rbegin(); // 指向最后一个元素
	string::iterator retIter = str.erase(--strRIter.base()); // 接收返回的iterator
	strRIter = string::reverse_iterator(retIter); // 修复reverse_iterator
	cout << str << endl;
	return 0;
}


输出是"Uranux"。


注意以下几点:

1. 对于reverse_iterator,rbegin()指向最后一个元素;

2. 多种stl容易的erase和insert方法只接收和返回iterator,不接收reverse_iterator,所以需要进行转换,reverse_iterator::base()可以返回一个对应的RandomIterator,可以隐式转换为iterator;

3. reverse_iterator::base()与reverse_iterator本身的指向并不一致,而是有错位(当reverse_iterator指向rbegin(),即最后一个元素位置的时候,reverse_iterator::base()指向的是最后一个元素后面的一个位置),所以我在这里用了“--strRIter.base()”;

4. erase返回的iterator必须保留,因为erase方法会破坏原来的reverse_iterator,我们要利用返回的iterator重新构造之。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值