std::empty
Материал из cppreference.com
Определено в заголовочном файле <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_access | 201411L | (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
[править]Смотрите также
(C++20) | проверяет, пуст ли диапазон (объект точки настройки) |