10

なぜメンバー機能がありstd::string、友人には機能がないのですか?findstd::vector

文字列での使用std::findに問題はありますか?

4

2 に答える 2

4

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<>

于 2013-02-12T23:22:09.637 に答える