目次
はじめに
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()は非常に便利なツールです。
