• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function template
    <iterator>

    std::empty

    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

    処理系

    参照