你能在字符串中使用 advance() 吗::迭代器 在C++

Can you use advance() in a string::iterator in C++?

本文关键字:迭代器 C++ 字符串 advance      更新时间:2023-10-16
        for( string::iterator it = line.begin(); it != line.end(); it++ )
        {
            advance( it, 1 );
        }

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

您肯定可以在那里使用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] 获取它。

看起来您可能希望将其++更改为++it。我 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/