なぜメンバー機能がありstd::string、友人には機能がないのですか?findstd::vector
文字列での使用std::findに問題はありますか?
std::string::find (*)のセマンティクスは、 のセマンティクスとはまったく異なりstd::findます。アルゴリズムの場合、コンテナー内の要素を見つけます。これを astd::string手段に適用すると、文字が X である場所を見つけます。
メンバー関数std::string::find(単一の を受け取る 1 つのバリアントを除くcharT) は異なる目的を持ち、部分文字列(つまり、単一の値ではなく一連の値) を検索します。
charT次の質問は、単に への呼び出しである可能性があるのに、 を受け取る 1 つのオーバーロードが存在する理由ですstd::find。Andy が回答で述べているように、STL と文字列ライブラリの実装は別々に行われました。その後、イテレータがstd::stringコンポーネントに追加されました。イテレータが に追加されるまでに、このオーバーロードはすでに存在していました。そうでなかったとしても、セマンティクスはの残りの部分と同様に、位置を取得して返すイテレータの代わりにとstd::stringは少し異なります。これは、一方を他方に関して実装できないという意味ではなく、コードがより複雑になるということだけです。std::findstd::string::find
(*) Bear with me...std::string綴られているかのように読んでくださいstd::basic_string<>