Namensräume
Varianten
Aktionen

std::empty

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
Bereichszugriff
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
empty
(C++17)
(C++17)
 
Definiert in der Header-Datei <array>
Definiert in Header <deque>
Definiert in Header <flat_map>
Definiert in Header <flat_set>
Definiert in Header <forward_list>
Definiert in Header <inplace_vector>
Definiert in Header <iterator>
Definiert in Header <list>
Definiert in Header <map>
Definiert in Header <regex>
Definiert in Header <set>
Definiert in Header <span>
Definiert in Header <string>
Definiert in Header <string_view>
Definiert in Header <unordered_map>
Definiert in Header <unordered_set>
Definiert in Header <vector>
template< class C >
constexpr auto empty( const C& c ) -> decltype(c.empty());
(1) (seit C++17)
template< class T, std::size_t N >
constexpr bool empty( const T (&array)[N] ) noexcept;
(2) (seit C++17)
template< class E >
constexpr bool empty( std::initializer_list<E> il ) noexcept;
(3) (seit C++17)

Gibt zurück, ob der gegebene Bereich leer ist.

1) Gibt `c.empty()` zurück.
2) Gibt `false` zurück.
3) Gibt `il.size() == 0` zurück.

Inhalt

[bearbeiten] Parameter

c - ein Container oder View mit einer Member-Funktion `empty`
array - Ein Array beliebigen Typs
il - eine `std::initializer_list`

[bearbeiten] Rückgabewert

1) `c.empty()`
2) `false`
3) `il.size() == 0`

[bearbeiten] Ausnahmen

1) Kann implementierungsabhängige Ausnahmen auslösen.

[bearbeiten] Hinweise

Die Überladung für `std::initializer_list` ist notwendig, da diese keine Member-Funktion `empty` besitzt.

Feature-Test-Makro Wert Std Feature
__cpp_lib_nonmember_container_access 201411L (C++17) std::size(), std::data() und `std::empty()`

[bearbeiten] Mögliche Implementierung

Erste Version
template<class C>
[[nodiscard]] constexpr auto empty(const C& c) -> decltype(c.empty())
{
    return c.empty();
}
Zweite Version
template<class T, std::size_t N>
[[nodiscard]] constexpr bool empty(const T (&array)[N]) noexcept
{
    return false;
}
Dritte Version
template<class E>
[[nodiscard]] constexpr bool empty(std::initializer_list<E> il) noexcept
{
    return il.size() == 0;
}

[bearbeiten] Beispiel

#include <iostream>
#include <vector>
 
template<class T>
void print(const T& container)
{
    if (std::empty(container))
        std::cout << "Empty\n";
    else
    {
        std::cout << "Elements:";
        for (const auto& element : container)
            std::cout << ' ' << element;
        std::cout << '\n';
    }
}
 
int main()
{
    std::vector<int> c = {1, 2, 3};
    print(c);
    c.clear();
    print(c);
 
    int array[] = {4, 5, 6};
    print(array);
 
    auto il = {7, 8, 9};
    print(il);
}

Ausgabe

Elements: 1 2 3
Empty
Elements: 4 5 6
Elements: 7 8 9

[bearbeiten] Siehe auch

prüft, ob ein Range leer ist
(Customization Point Objekt)[edit]