なぜメンバー機能がありstd::string
、友人には機能がないのですか?find
std::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::find
std::string::find
(*) Bear with me...std::string
綴られているかのように読んでくださいstd::basic_string<>