你能在C ++中的string :: iterator中使用advance()吗?

时间:2014-09-16 00:11:26

标签: c++ string iterator

        for( string::iterator it = line.begin(); it != line.end(); it++ )
        {
            advance( it, 1 );
        }

我遇到了分段错误。我试图在迭代器中获取下一个值,以便我可以将它与十六进制进行比较。

2 个答案:

答案 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/