【初心者向け】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
関数を使用するのが最善です。