永发信息网

c++string迭代器可不可以用于逆序输出

答案:3  悬赏:60  手机版
解决时间 2021-07-18 07:16
  • 提问者网友:抽煙菂渘情少年
  • 2021-07-17 21:47

我想用string的迭代器逆序输出,但是却出错了。

我的程序是这个样子的:

string s;
s="visualc++";
for(string::iterator i=s.end()-1;i>=s.begin();i--)
cout<<*i;

编译没有错,也没有警告,但是是运行的时候却出错了。错误提示是这样的。(运行的确达到了逆序输出的效果)。我用的是微软visualC++2008速成版。请问这是什么原因?该怎么解决?

最佳答案
  • 五星知识达人网友:野慌
  • 2021-07-17 21:56
估计是你代码其他部分的问题,输出逆序的话可以使用reverse_iterator

#include <iostream>
#include <string>
using namespace std;

int main()
{
string s;
s="visualc++";
for(string::reverse_iterator i = s.rbegin(); i != s.rend(); ++i)
cout << *i;
}


我发现问题所在了,vc2008在调试的时候加入了对iterator的越界检查,所以你最后--i把i减出了s(字符v之前),而iterator只有超尾的概念,所以越过了s.begin(),编译器认为你将会执行一些不正确地操作,所以给你了一个run time check error。如果你用release模式编译生成就没有任何问题。

不过还是那句话,这样倒序输出显得有些别扭,而且stl容器都基本提供了逆序的带器,和一般迭代器一样的用法,只不过遍历顺序的倒过来的,你可以看看我上面的代码。

(PS:使用迭代器进行遍历时最好使用前置自增/自减操作符,在这种情况下通常i++会损失一些执行效率)
全部回答
  • 1楼网友:摆渡翁
  • 2021-07-17 23:08
可能是你最后一次循环过头了
  • 2楼网友:封刀令
  • 2021-07-17 22:09
我测试了下 这段代码是没什么问题的 会不会是你别的地方出问题了呢? #include "string" #include "iostream" using namespace std; void main() { string s; s="visualc++"; for(string::iterator i=s.end()-1;i>=s.begin();i--) cout<<*i; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯