はじめに
C++でstd::string
を扱う際、その文字列に何文字含まれているかという「長さ」を取得したい場面は頻繁にあります。
この目的のために、std::string
クラスには .size()
と .length()
という2つのメンバ関数が用意されています。この記事では、これらの関数の使い方と、両者の関係について解説します。
.size()
/ .length()
を使ったサンプルコード
このコードは、空の文字列と、値を持つ文字列の両方に対して、.size()
と.length()
を呼び出し、その戻り値が同じであることを示します。
完成コード
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, C++";
string empty_text;
// 1. 値を持つ文字列の長さを取得
cout << "--- text ---" << endl;
cout << "内容: \"" << text << "\"" << endl;
cout << ".size() -> " << text.size() << endl;
cout << ".length() -> " << text.length() << endl;
// 2. 空の文字列の長さを取得
cout << "\n--- empty_text ---" << endl;
cout << "内容: \"" << empty_text << "\"" << endl;
cout << ".size() -> " << empty_text.size() << endl;
cout << ".length() -> " << empty_text.length() << endl;
return 0;
}
実行結果
--- text ---
内容: "Hello, C++"
.size() -> 10
.length() -> 10
--- empty_text ---
内容: ""
.size() -> 0
.length() -> 0
コードの解説
.size()
と .length()
は全く同じ
std::string
において、.size()
と.length()
は、機能・性能ともに完全に同じです。どちらを使っても、文字列に含まれる文字数を size_t
という符号なし整数型で返します。
なぜ2つ存在するのか?
std::string
は、C++の標準ライブラリ(STL)が標準化される過程で、他のコンテナ(vector
など)との一貫性のために .size()
を持つようになりました。一方で、他の多くのプログラミング言語での慣習に合わせて、より直感的な .length()
という名前も残されました。
どちらを使うかは完全に好みの問題ですが、vector
やmap
など、他のSTLコンテナとコードの見た目を統一したい場合は .size()
を、文字列の「長さ」という意図を明確にしたい場合は .length()
を使う、といった使い分けが考えられます。
まとめ
今回は、C++の std::string
の文字数を取得する .size()
と .length()
について解説しました。
.size()
と.length()
は、機能的に全く同じ。- 文字列の文字数を返す。
- どちらを使うかは、コーディングスタイルや好みの問題。
for
ループの条件式 for (size_t i = 0; i < my_string.length(); ++i)
のように、文字列の長さを取得するのは非常に基本的な操作です。