std :: string length()およびsize()メンバー関数


265

私はこの質問の回答を読んでいて、実際に呼び出されるメソッドがあることを発見しlength()ましたstd::string(私は常にを使用していましたsize())。このメソッドをstd::stringクラスに含める理由はありますか?私は、MSDNとCppRefernceの両方を読んで、そして、彼らは差がないことを示しているように見えるsize()length()。もしそうなら、それはクラスのユーザーをより混乱させませんか?

回答:


342

あたりとしてのドキュメント、これらは単なる同義語です。 size()(のような他のSTLコンテナと一致そこにあるvectormapなど)とlength()文字列のほとんどの人々の直感的な概念と一致しています。人々は通常、単語、文、段落の長さではなく、長さについて話します。そのため、length()読みやすくするためにそこにあります。


9
同意した。テンプレートクラスと関数を作成するときはsize()(文字列以外のクラスを使用する場合に備えて)使用したいのですが、ほとんどのlength()場合、プレーンな文字列を扱うときに使用します。
マリウス

3
size()はメモリ内の文字列のサイズ(バイト単位)を返さないのに対し、length()はたまたま一致する文字数を返します。1文字= 1バイトだからです。
Boyan Kushlev 2016年

4
いいえ、同じ機能です。ドキュメントも共有しています:en.cppreference.com/w/cpp/string/basic_string/size
Todd Gamblin、2016年

4
これらは両方とも、distance(s.begin()、s.end())と同等であると定義されています。ここで、begin()とend()はCharT要素のイテレータです。CharTは、文字列の内容を決定するテンプレートパラメータです。std :: stringの場合、CharTはcharです。std :: wstringの場合、CharTはwchar_tで、通常は2または4バイトです。そこでも、length()とsize()はどちらも、バイト数ではなく、文字列の文字数を返します。
Todd Gamblin、2016年

5
時々人々がstd :: stringを使用してUTF8文字列を格納することを忘れなければなりません。また、utf8文字列は可変長コーディングなので、length()またはsize()を使用して文字列文字の数を取得することはできません。:実際には、彼らはただの要素の数を返すstd::string=> std::bacsic_string<char> count of char std::wstring => std::basic_string<wchar_t> count of wchar_t.
シーン天

16

Rubyはまったく同じですが、両方#length 提供し#size、配列とハッシュの項目数の同義語として提供します(C ++は文字列に対してのみそれを行います)。

(PythonのZenが語るように)ミニマリストと「それを行うには1つ、理想的には1つだけ、明白な方法があるべきだ」と信じている人々は、Perlのファンである一方で、あなたの疑問にほとんど同意します、@ Naveenそれを行うには複数の方法があります」(または、1つの概念を表現するために多数のまったく同等の構文形式を与える膨大なオプションの「ノイズワード」を使用したSQLの構文)は、Ruby、特にC ++に文句を言わないでしょう。そのような同義の冗長性を提供するのに十分です;-)。


9
この場合、それは不必要です。Perlの文法と使用法により、好きなスタイルを使って表現することができます。同じものに対して2つの異なる単語があると、Stackoverflowで検索用語を思い付くのが難しくなります。
エイドリアンラトナパラ2012年

0

コーディング練習ツール(LeetCode)を使用する場合、size()はlength()よりも速いようです(ただし、基本的には無視できます)


-10

文字列の長さ==文字列が持つビット数、size ==それらのビットのサイズ、文字列では、エディターが文字のサイズを割り当てる場合、両方とも同じです1バイト


7
間違った答え。承認された回答にリンクされているドキュメントを参照してください。
Stefan de Kok 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.