std::empty
Определён в заголовочном файле <array> | ||
|---|---|---|
Определён в заголовочном файле <deque> | ||
Определён в заголовочном файле <flat_map> | (начиная с C++23) | |
Определён в заголовочном файле <flat_set> | (начиная с C++23) | |
Определён в заголовочном файле <forward_list> | ||
Определён в заголовочном файле <hive> | (начиная с C++26) | |
Определён в заголовочном файле <inplace_vector> | (начиная с C++26) | |
Определён в заголовочном файле <iterator> | ||
Определён в заголовочном файле <list> | ||
Определён в заголовочном файле <map> | ||
Определён в заголовочном файле <optional> | (начиная с C++26) | |
Определён в заголовочном файле <regex> | ||
Определён в заголовочном файле <set> | ||
Определён в заголовочном файле <span> | (начиная с C++20) | |
Определён в заголовочном файле <stacktrace> | (начиная с C++23) | |
Определён в заголовочном файле <string> | ||
Определён в заголовочном файле <string_view> | ||
Определён в заголовочном файле <unordered_map> | ||
Определён в заголовочном файле <unordered_set> | ||
Определён в заголовочном файле <valarray> | ||
Определён в заголовочном файле <vector> |
template< class C >
constexpr auto empty( const C& c ) noexcept(noexcept(c.empty()))
-> decltype(c.empty());
| (1) | (начиная с C++17) |
template< class T, std::size_t N > constexpr bool empty( const T (&array)[N] ) noexcept; | (2) | (начиная с C++17) |
Возвращает признак того, что заданный диапазон пуст.
1) Возвращает
c.empty().
2) Возвращает
false.Параметры
| c | - | контейнер или представление с функцией-членом empty |
| array | - | массив произвольного типа |
Возвращаемое значение
1)
c.empty()
2)
false
Исключения
1) Те же исключения и при тех же условиях, что и при вызове underlying
c.empty().Примечания
| Макрос проверки поддержки возможности | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_nonmember_container_access | 201411L | (C++17) |
std::size(), std::data() и std::empty() |
__cpp_lib_initializer_list | 202511L |
(C++26) (DR11) |
функции-члены data и empty класса std::initializer_list;удаление ненужных свободных функций для std::initializer_list[1] |
- По состоянию на 2026-05-27, libstdc++ не рассматривает добавление и удаление функций из P3016R6 как отчёт об ошибке для C++11 и применяет эти изменения только начиная с C++26.
Перегрузка дляstd::initializer_listбыла необходима до P3016R6, поскольку у него не было функции-членаempty.
Возможная реализация
| Первая версия |
|---|
template<class C>
[[nodiscard]] constexpr auto empty(const C& c) noexcept(noexcept(c.empty()))
-> decltype(c.empty())
{
return c.empty();
}
|
| Вторая версия |
template<class T, std::size_t N>
[[nodiscard]] constexpr bool empty(const T (&array)[N]) noexcept
{
return false;
}
|
Пример
#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);
}
Вывод:
Elements: 1 2 3 Empty Elements: 4 5 6 Elements: 7 8 9
Отчёт об ошибке
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| P3016R6 | C++17 | 1) была предоставлена нешаблонная функция-член std::empty для std::initializer_list2) от std::empty не требовалось распространять спецификацию исключений | 1) удалена 2) требуется |
См. также
|
(C++20) | проверяет, пуст ли диапазон (объект-точка настройки) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/empty