【初心者向け】C++の`std::basic_string::clear` 関数:使い方と代替方法を徹底解説


関数詳細

  • 例外
    なし
  • 戻り値
    なし
  • ヘッダーファイル
    <string>
  • 関数名
    clear

使い方

std::string str = "Hello, World!";
str.clear();
std::cout << str << std::endl; // 出力: ""


上記の例では、str 変数に文字列 "Hello, World!" を代入し、clear 関数を使用してすべての文字を削除しています。その後、str 変数を出力すると、空文字列が表示されます。

clear 関数の利点

  • 効率的
  • コードが簡潔で読みやすい
  • イテレータ、ポインタ、および参照は無効になる
  • すべての文字が削除されるため、元々の文字列の内容は失われる
  • find(): 文字列内の部分文字列を検索する
  • insert(): 文字列の一部に文字列を挿入する
  • erase(): 文字列の一部を削除する
  • append(): 文字列の末尾に文字列を追加する
  • assign(): 文字列を別の文字列に割り当てる
  • size(): 文字列の長さを取得する
  • empty(): 文字列が空かどうかを確認する


例 1: 文字列をクリアして空にする

この例では、std::basic_string オブジェクトを作成し、"Hello, World!" という文字列を代入します。その後、clear 関数を使用してすべての文字を削除し、空文字列にします。

#include <iostream>
#include <string>

int main() {
  std::basic_string<char> str = "Hello, World!";

  std::cout << "初期化: " << str << std::endl; // 出力: 初期化: Hello, World!

  str.clear();

  std::cout << "クリア後: " << str << std::endl; // 出力: クリア後: 

  return 0;
}

例 2: clear 関数を使用して文字列内の特定の部分を削除する

この例では、std::basic_string オブジェクトを作成し、"Hello, World!" という文字列を代入します。その後、clear 関数を使用して "World!" 部分を削除し、"Hello" だけが残るようにします。

#include <iostream>
#include <string>

int main() {
  std::basic_string<char> str = "Hello, World!";

  std::cout << "初期化: " << str << std::endl; // 出力: 初期化: Hello, World!

  str.erase(str.find(' '), str.size()); // "World!"部分を削除

  std::cout << "クリア後: " << str << std::endl; // 出力: クリア後: Hello

  return 0;
}

例 3: イテレータを使用して clear 関数を実装する

この例では、std::basic_string オブジェクト内のすべての要素を削除する独自の clear 関数を実装する方法を示します。

#include <iostream>
#include <string>

void my_clear(std::basic_string<char>& str) {
  for (auto it = str.begin(); it != str.end(); ++it) {
    *it = '\0';
  }

  str.erase(str.begin(), str.end());
}

int main() {
  std::basic_string<char> str = "Hello, World!";

  std::cout << "初期化: " << str << std::endl; // 出力: 初期化: Hello, World!

  my_clear(str);

  std::cout << "クリア後: " << str << std::endl; // 出力: クリア後: 

  return 0;
}

これらの例は、std::basic_string::clear 関数のさまざまな使用方法を示しています。この関数は、文字列を操作する際に役立つ便利なツールです。

  • 文字列の前後にある空白を削除する
  • 文字列を大文字または小文字に変換する
  • 特定の文字をすべて削除する


以下に、std::basic_string::clear の代替方法をいくつか紹介します。

erase 関数を使用する

erase 関数は、std::basic_string オブジェクトから範囲内の要素を削除するために使用できます。clear 関数と同じ効果を得るためには、erase 関数を使用して、文字列の最初から最後まで要素を削除します。

std::string str = "Hello, World!";

str.erase(str.begin(), str.end());

std::cout << str << std::endl; // 出力: ""

イテレータを使用して要素をループする

この方法では、イテレータを使用して std::basic_string オブジェクト内のすべての要素をループし、各要素を '\0' に設定します。

std::string str = "Hello, World!";

for (auto it = str.begin(); it != str.end(); ++it) {
  *it = '\0';
}

str.erase(str.begin(), str.end());

std::cout << str << std::endl; // 出力: ""

assign 関数を使用して空文字列を割り当てる

assign 関数は、std::basic_string オブジェクトに別の文字列を割り当てるために使用できます。空文字列を割り当てることで、std::basic_string オブジェクト内のすべての文字を削除できます。

std::string str = "Hello, World!";

str.assign("");

std::cout << str << std::endl; // 出力: ""

スワップを使用して空の std::basic_string オブジェクトと交換する

この方法では、空の std::basic_string オブジェクトを作成し、元の std::basic_string オブジェクトとスワップします。これにより、元のオブジェクト内のすべての文字が削除されます。

std::string str = "Hello, World!";
std::string empty_str;

std::swap(str, empty_str);

std::cout << str << std::endl; // 出力: ""

どの代替方法を使用するべきか

使用する代替方法は、状況によって異なります。一般的に、以下の点を考慮する必要があります。

  • 可読性
    コード的可読性を重視する場合は、イテレータを使用して要素をループする方法が最善です。
  • パフォーマンス
    パフォーマンスが重要であれば、erase 関数を使用して要素を直接削除するのが最善です。
  • 簡潔性
    コードの簡潔性を重視する場合は、clear 関数を使用するのが最善です。