返回信息流string s("APLle");
string::iterator iter_s(s.begin());
while(iter_s!=s.end()){
if(isupper(*iter_s)){
s.erase(iter_s);
cout << *iter_s << *--iter_s << *++iter_s << endl;
}
}
判断到A时,后面紧跟的三个输出都一样呢,求解,thx
这是一条镜像帖。来源:北邮人论坛 / cpp / #80996同步于 2014/7/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求问,关于erase函数
NM999
2014/7/24镜像同步21 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
仔细看下cpp erase 的介绍就知道了。
【 在 NM999 (已跪在pipelineADC的路上) 的大作中提到: 】
: string s("APLle");
: string::iterator iter_s(s.begin());
: while(iter_s!=s.end()){
: ...................
通过『我邮2.0』发布
http://www.cplusplus.com/reference/string/string/erase/
Iterator validity
Any iterators, pointers and references related to this object may be invalidated.
哦,我是偶尔碰到个问题就专门这样测试了下,我只是好奇为什么*iter和*--iter出来的结果是一样的呢,请问能告诉我下吗,thx
【 在 zhihao 的大作中提到: 】
: 不core 算楼主好运这么用erase 应该这样iter_s = s.erase (iter_s)
: 通过『我邮2.0』发布
哦,这样啊,那如果说用了erase函数删了*iter而不给出新的iter,那么*iter是什么呢,还有如果给出了新的iter,那么*--iter又是什么呢,在此基础上,如果删了的是begin的元素,两个的答案又是什么呢,请问下,这里一直很昏啊
【 在 gsl2011 的大作中提到: 】
: erase会使原迭代器失效 需要iter_s = s.erase (iter_s) 才行