【C++】std::stringの文字列を空にする.clear()の使い方

目次

はじめに

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次