我正试图用这样的迭代器向后打印std::string
:
std::string back = "hello";
for(std::string::iterator it=back.end(); it!=back.begin(); --it)
{
std::cout << (*it);
}
但输出只会打印出来:
olle
为什么不打印h?我尝试了几种不同的东西并玩弄它,但我似乎无法弄清楚原因。任何帮助将不胜感激,谢谢! :)
答案 0 :(得分:13)
std::string back = "hello";
for (std::string::reverse_iterator it = back.rbegin(); it != back.rend(); ++it)
{
std::cout << (*it);
}
答案 1 :(得分:6)
std::string::iterator it=back.end();
it
初始化为end()
。然后,在循环内部:
std::cout << (*it);
由于it
的初始值为end()
,因此取消引用它是未定义的行为,结果不可预测。
正确的做法是在 取消引用之前递减it
:
for(std::string::iterator it=back.end(); it!=back.begin(); )
{
--it;
std::cout << (*it);
}
答案 2 :(得分:5)
如果你不想要for循环:
#include <algorithm>
std::string string_back = "hello";
std::reverse(string_back.begin(), string_back.end());
std::cout << string_back; // prints 'olleh'