【C++】コンテナが空かどうかを判定する.empty()の使い方 (sizeとの違い)

目次

はじめに

C++でvectorstringmapなどのコンテナを扱う際、「コンテナに要素が一つでも含まれているか、それとも空っぽか」を判定したい場面は非常に多くあります。

この判定には、.empty() というメンバ関数を使うのが、最もシンプルで推奨される方法です。.empty() は、コンテナが空であれば true を、一つでも要素があれば false を返します。

この記事では、.empty() の基本的な使い方と、.size() == 0 という判定方法との違いについて解説します。


.empty() を使ったサンプルコード

このコードは、vector を作成し、要素を追加したり削除したりしながら、その都度 .empty() を呼び出して、コンテナが空かどうかを判定します。

完成コード

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
    vector<string> shopping_list;
    
    // 1. 作成直後の状態
    //    まだ何も入っていないので、empty()はtrueを返す
    cout << "買い物リストは空ですか? -> " << boolalpha << shopping_list.empty() << endl;
    
    // 2. 要素を追加
    shopping_list.push_back("りんご");
    cout << "りんごを追加しました。" << endl;
    
    //    要素が一つ入ったので、empty()はfalseを返す
    cout << "買い物リストは空ですか? -> " << boolalpha << shopping_list.empty() << endl;
    
    // 3. 要素を削除
    shopping_list.pop_back();
    cout << "りんごを削除しました。" << endl;
    
    //    再び空になったので、empty()はtrueを返す
    cout << "買い物リストは空ですか? -> " << boolalpha << shopping_list.empty() << endl;

    return 0;
}

boolalpha: bool値を 1/0 ではなく true/false の文字列として出力させます。


コードの解説と .size() との違い

.empty()

  • 機能: コンテナの要素数がゼロかどうかを判定し、bool値 (true/false) を返します。
  • 戻り値:
    • コンテナが空の場合 → true
    • コンテナに要素が1つ以上ある場合 → false

なぜ .size() == 0 ではなく .empty() を使うのか?

コンテナが空かどうかは、if (my_vector.size() == 0) のように、要素数を返す .size() を使っても判定できます。しかし、.empty() を使う方が一般的に推奨されます。その理由は以下の通りです。

  1. 意図の明確さ: .empty() という関数名は、「空かどうかを判定したい」というプログラマの意図を直接的に表現します。size() == 0 よりも、コードが読みやすくなります。
  2. パフォーマンス: std::list のような一部のコンテナでは、.size() の計算量がO(n)(要素数に比例)である可能性があります(C++11以降ではO(1)が保証されました)。一方、.empty() は常に**O(1)(定数時間)**で完了することが保証されています。どのようなコンテナでも、.empty() の方が高速であるか、少なくとも同等です。

結論として、コンテナが空かどうかを判定する目的では、常に .size() == 0 よりも .empty() を使うべきです。


まとめ

今回は、C++のコンテナが空かどうかを判定する .empty() メソッドについて解説しました。

  • .empty() を使うと、コンテナが空 (true) かどうかを簡単に判定できる。
  • .size() == 0 よりも、意図が明確で、かつパフォーマンス上有利なため、.empty() の使用が強く推奨される。

ループ処理の前など、コンテナに要素が存在するかどうかを確認する際には、if (!my_container.empty()) のようなチェックを入れるのが、安全なプログラミングの定石です。

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

この記事を書いた人

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

目次