Пространства имён
Варианты
Действия

std::empty

Материал из cppreference.com
< cpp‎ | iterator
 
 
Библиотека итераторов
Концепты итераторов
Примитивы итераторов
Концепты алгоритмов и утилиты
Косвенно вызываемые концепты
Общие требования к алгоритмам
Утилиты
(C++20)
Адаптеры итераторов
Потоковые итераторы
Точки настройки итераторов
Операции итераторов
Доступ к диапазону
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
empty
(C++17)
(C++17)
 
Определено в заголовочном файле <array>
Определено в заголовочном файле <deque>
Определено в заголовочном файле <forward_list>
Определено в заголовочном файле <iterator>
Определено в заголовочном файле <list>
Определено в заголовочном файле <map>
Определено в заголовочном файле <regex>
Определено в заголовочном файле <set>
Определено в заголовочном файле <span>
(начиная с C++20)
Определено в заголовочном файле <string>
Определено в заголовочном файле <string_view>
Определено в заголовочном файле <unordered_map>
Определено в заголовочном файле <unordered_set>
Определено в заголовочном файле <vector>
(1)
template<class C>
constexprauto empty(const C& c)-> decltype(c.empty());
(начиная с C++17)
(до C++20)
template<class C>
[[nodiscard]]constexprauto empty(const C& c)-> decltype(c.empty());
(начиная с C++20)
(2)
template<class T, std::size_t N>
constexprbool empty(const T (&array)[N])noexcept;
(начиная с C++17)
(до C++20)
template<class T, std::size_t N>
[[nodiscard]]constexprbool empty(const T (&array)[N])noexcept;
(начиная с C++20)
(3)
template<class E>
constexprbool empty(std::initializer_list<E> il)noexcept;
(начиная с C++17)
(до C++20)
template<class E>
[[nodiscard]]constexprbool empty(std::initializer_list<E> il)noexcept;
(начиная с C++20)

Возвращает, является ли данный диапазон пустым.

1) возвращает c.empty()
2) возвращает false
3) возвращает il.size()==0

Содержание

[править]Параметры

c контейнер или представление с функцией-элементом empty
array массив произвольного типа
il список инициализаторов

[править]Возвращаемое значение

true, если в диапазоне нет ни одного элемента.

[править]Исключения

1) Может генерировать исключения, определённые реализацией.

[править]Примечание

Перегрузка для std::initializer_list необходима, так как у него нет функции-элемента empty.

Макрос Тестирования функциональностиЗначениеСтандартФункциональность
__cpp_lib_nonmember_container_access201411L(C++17)std::size(), std::data() и std::empty()

[править]Возможная реализация

Первая версия
template<class C>[[nodiscard]]constexprauto empty(const C& c)-> decltype(c.empty()){return c.empty();}
Вторая версия
template<class T, std::size_t N>[[nodiscard]]constexprbool empty(const T (&array)[N])noexcept{returnfalse;}
Третья версия
template<class E>[[nodiscard]]constexprbool empty(std::initializer_list<E> il)noexcept{return il.size()==0;}

[править]Пример

#include <iostream>#include <vector>   template<class T>void print(const T& container){if( std::empty(container)){std::cout<<"Пустой\n";}else{std::cout<<"Элементы:";for(constauto& 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);}

Вывод:

Элементы: 1 2 3 Пустой Элементы: 4 5 6 Элементы: 7 8 9

[править]Смотрите также

проверяет, пуст ли диапазон
(объект точки настройки)[править]
close