目次
はじめに
C++でstd::string
を扱う際、ループ処理の中で同じstring
変数を再利用する前など、「文字列の中身を一旦すべて削除して、空の状態に戻したい」という場面があります。
この目的のために、std::string
クラスには .clear()
というメンバ関数が用意されています。.clear()
を呼び出すだけで、文字列は長さがゼロの空文字列になります。
.clear()
を使ったサンプルコード
このコードは、string
に文字列を代入した後、.clear()
を呼び出して空にし、その前後で.length()
と.empty()
の値がどう変化するかを示します。
完成コード
#include <iostream>
#include <string>
using namespace std;
int main() {
string buffer = "Initial text";
cout << "--- clear()前 ---" << endl;
cout << "内容: \"" << buffer << "\"" << endl;
cout << "長さ (length): " << buffer.length() << endl;
cout << "空かどうか (empty): " << boolalpha << buffer.empty() << endl;
// 1. .clear()で、文字列の中身を空にする
buffer.clear();
cout << "\n--- clear()後 ---" << endl;
cout << "内容: \"" << buffer << "\"" << endl;
cout << "長さ (length): " << buffer.length() << endl;
cout << "空かどうか (empty): " << boolalpha << buffer.empty() << endl;
return 0;
}
コードの解説
buffer.clear();
- 機能: 文字列オブジェクト
buffer
が保持している全ての文字を削除し、長さ (.length()
) を0
にします。 s = "";
との違い:s.clear();
とs = "";
(空の文字列リテラルを代入)は、どちらも文字列を空にするという点では同じ結果になります。一般的に、.clear()
の方が「文字列を空にする」という意図が明確であるため、好まれる傾向にあります。
注意点: capacity()
は変わらない
.clear()
は文字を削除しますが、std::string
が内部的に確保しているメモリ領域(キャパシティ)を解放するとは限りません。これは、同じstring
変数に再び文字が代入される際のパフォーマンスを考慮した仕様です。確保したメモリを完全に解放したい場合は、.shrink_to_fit()
(C++11) を呼び出します。
まとめ
今回は、C++の std::string
の全内容を削除する .clear()
メソッドについて解説しました。
.clear()
を呼び出すだけで、文字列を簡単かつ効率的に空にできる。.clear()
は文字を削除するが、確保済みメモリ (capacity
) は解放しない場合がある。
string
変数を再利用する前に、その中身をリセットする処理として、.clear()
は非常に便利なツールです。