21

私は C++ のチュートリアルに従っており、文字列を見て+===!=などの演算子でオーバーロードしています。現在、単純な if ステートメントがあります。

if(s1 < s2)
    cout << s2 <<endl;
else
  if(s2 < s1)
    cout << s1 << endl;
  else
    cout << "Equal\n";

しかし、これはどのように機能し、プログラムはどの文字列が他の文字列よりも大きいかをどのように判断するのでしょうか? 周りを見回すと、基本的なテンプレート宣言が見つかりました:

template<class charT, class traits, class Allocator>
bool operator< ( const basic_string<charT,traits,Allocator>& lhs,
                 const basic_string<charT,traits,Allocator>& rhs );

これはどのように<機能するかを定義していますか?もしそうなら、どういう<charT,traits,Allocator>意味ですか/するのですか?

また、次の演算子は文字列に対して何らかの意味がありますか? -=*=

4

2 に答える 2

32

文字列のless-than演算子は、文字列の辞書式比較を行います。これは、文字列を辞書順にリストするのと同じ方法で比較し、文字以外の文字を含む文字列に対して機能するように一般化されています。

例えば:

"a" < "b"
"a" < "ab"
"A" < "a"             (Since A has ASCII value 65; a has a higher ASCII value)
"cat" < "caterpillar"

詳細についてはstd::lexicographical_compare、lessthan演算子が通常呼び出すアルゴリズムを参照してください。

-=とについて*=は、これらの演算子はどちらも文字列で定義されていません。定義されている唯一の「算術」演算子は、文字列の連結を実行する+とです。+=

お役に立てれば!

于 2012-12-11T22:18:14.797 に答える
2

比較演算子は、文字列の辞書式順序を実装します。

-=文字列に*=は定義されていません。

于 2012-12-11T22:18:12.043 に答える