利用reverse_iterator删除string末尾元素

来源:互联网 发布:软件项目建议书模板 编辑:程序博客网 时间:2024/05/16 00:55

先看代码:

#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()); // 接收返回的iteratorstrRIter = string::reverse_iterator(retIter); // 修复reverse_iteratorcout << 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 0