for( string::iterator it = line.begin(); it != line.end(); it++ )
{
advance( it, 1 );
}
我遇到了分段错误。我试图在迭代器中获取下一个值,以便我可以将它与十六进制进行比较。
答案 0 :(得分:2)
您确定可以在那里使用advance
,但请注意:
除非你在接近结尾之前打破循环,或者字符串的长度是偶数,否则你将有一个缓冲区溢出和UB。
for( string::iterator it = line.begin(); it != line.end(); it++ )
{
advance( it, 1 );
}
也是等同的:
for(auto it = line.begin(); it != line.end(); it += 2 )
{}
因为advance(it, 1);
相当于++i;
见这里:http://en.cppreference.com/w/cpp/iterator/advance
如果您只想要下一个值,请使用it+1 != line.end()
检查其是否存在,并使用it[1]
获取。
答案 1 :(得分:0)
看起来你可能想把它改成++它。我在这里引用了这个示例案例http://www.cplusplus.com/reference/string/string/begin/。我认为这会为你推进迭代器,所以我认为你不需要这两个并提前。尝试类似的东西 此,
string::iterator it = line.begin();
while(it != line.end()){
//Do something with the iterator
advance( it, 1 );
}
这是我觉得有用的另一个参考。 http://www.cplusplus.com/reference/iterator/advance/