の動作がstd::string::find
標準のC ++コンテナと一致しないことがわかりました。
例えば
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
しかし、ひもについては、
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
代わりに失敗したmyStr.find('!')
リターンをすべきではないmyStr.end()
のstd::string::npos
ですか?
std::string
は他のコンテナと比較するとやや特殊なので、これには何らかの理由があるのかと思います。(驚いたことに、私はこれをどこかで疑う人を見つけることができませんでした)。
std::string
内部的には(メモリに関して)安価な要素である文字で構成されているためです。そして、さらに、キャラクターがstd::string
含むことができる唯一のタイプです。一方、std::map
より複雑な要素で構成されています。また、の仕様はstd::map::find
要素を見つけることを想定していることを示し、の仕様はstd::string::find
位置を見つけることがそのタスクであることを示しています。