最終更新日時(UTC):
が更新

履歴 編集

function template
<iterator>

std::empty(C++17)

namespace std {
  template <class C>
  constexpr auto empty(const C& c) -> decltype(c.empty());               // (1) C++17

  template <class C>
  [[nodiscard]] constexpr auto empty(const C& c) -> decltype(c.empty()); // (1) C++20

  template <class T, std::size_t N>
  constexpr bool empty(const T (&array)[N]) noexcept;                    // (2) C++17

  template <class T, std::size_t N>
  [[nodiscard]] constexpr bool empty(const T (&array)[N]) noexcept;      // (2) C++20

  template <class E>
  constexpr bool empty(initializer_list<E> il) noexcept;                 // (3) C++17

  template <class E>
  [[nodiscard]] constexpr bool empty(initializer_list<E> il) noexcept;   // (3) C++20
}

概要

コンテナが空かどうかを判定する。

戻り値

  • (1) : return c.empty();
  • (2) : return false;
  • (3) : return il.size() == 0;

備考

#include <vector>
#include <iostream>

int main()
{
  int arr[4] = {};
  std::cout << std::boolalpha << std::empty(arr) << std::endl;

  std::cout << std::boolalpha << std::empty(u8"arikitari") << std::endl;

  std::vector<int> v;
  std::cout << std::boolalpha << std::empty(v) << std::endl;
  v.push_back(13);
  std::cout << std::boolalpha << std::empty(v) << std::endl;
  //変数vの型はstd名前空間にあるクラス型なので
  //ADLによって `std::`がなくとも発見できる
  std::cout << std::boolalpha << empty(v) << std::endl;
}

出力

false
false
true
false
false

バージョン

言語

  • C++17

処理系

参照