【发布时间】:2015-01-23 16:38:36
【问题描述】:
我想遍历一个字符串,从第一个元素到最后一个元素,但是当我执行以下代码时:
for (string::iterator i =beads.begin(); i != beads.end(); i++);
我无法到达最后一个元素。所以我把它改成了:
for (string::iterator i =beads.begin(); i <= beads.end(); i++);
编译器报错,说不能自增,因为beads.end()+1不存在。
我想知道是否有任何优雅的方法可以解决这个问题,以便我可以到达最后一个元素?
更正:
对不起,其实我是在做递减操作。
我把它改成增量操作只是为了让大家更容易看到。我忘记了beads.end() 是一个过去的迭代器。
我实际上使用的是for (string::iterator i =pos; i >= beads.begin(); i--);。因为beads.begin()不是before-the-start操作符,所以不能使用for (string::iterator i =pos; i != beads.begin(); i--);,否则永远不会到达第一个元素。
但是,编译器报告错误为beads.begin()-1 不存在。
如果我正在执行递减迭代,我可以知道如何解决问题吗?
【问题讨论】:
-
第一个是正确的(但最后的分号有问题)。你是什么意思你不能得到最后一个元素?
-
第一个应该可以。请显示更多代码
-
@0x499602D2 不好意思,其实我是在做递减操作。
for (string::iterator i =pos; i >= beads.begin(); i--)我改成增量操作只是为了方便大家看。我忘记了beads.end() 是一个过去的迭代器。 -
@lxjhk 你能发布一个代表问题的最小程序吗?另外,考虑使用反向迭代器(
rbegin()和rend()) -
@lxjhk 如果你向后走,那么不要使用
iterator,使用reverse_iterator。