C++ 寻找 std::string::iterator 到给定位置

Tim*_*Tim 7 c++ string iterator seek

是否可以安全地寻找std::string::iterator给定位置?

std::string::iterator 有一个偏移访问运算符(运算符 []),但它存在于某些人定义为未定义行为的类别中,例如it + 3.

cplusplus.com 参考

Kon*_*lph 9

\n

std::string::iterator 有一个偏移访问运算符(运算符[]),但它存在于某些人定义为未定义行为的类别中,例如 it + 3。

\n
\n\n

我不明白这个说法。没有这样的类别。std::basic_string<>::iterator是一个随机访问迭代器,因此您可以通过仅向其添加或减去偏移量来进行查找(这与您链接到的文档一致):

\n\n
auto new_it = it + offset;\n
Run Code Online (Sandbox Code Playgroud)\n\n

xe2\x80\x99s 未定义的是在end()关联容器的迭代器之后或在其开始之前寻找。也就是说,以下是未定义的行为:

\n\n
std::string str = "hi";\nauto it1 = str.begin() + 2; // OK.\nassert(it1 == str.end());\nauto it2 = str.begin() + 3; // UB!\n// At this point we cannot assert anything about it2\n
Run Code Online (Sandbox Code Playgroud)\n