std::tuple
| Определено в заголовочном файле <tuple>
|
||
| template< class... Типы > class tuple; |
(начиная с C++11) | |
Шаблон класса std::tuple представляет собой фиксированного размера набор разнородных значений. Это обобщение std::pair.
Если std::is_trivially_destructible<Ti>::value равно true для каждого Ti в Типы, деструктор tuple тривиален.
Содержание |
[править] Параметры шаблона
| Типы... | — | типы элементов, которые хранятся в кортеже. Поддерживается пустой список. |
[править] Функции элементы
создаёт новый tuple (public функция-элемент) | |
присваивает содержимое одного tuple другому (public функция-элемент) | |
меняет местами содержимое двух tuple местами (public функция-элемент) | |
[править] Функции, не являющиеся элементами
| (C++11) |
создаёт объект tuple типа, определённого типами аргументов (шаблон функции) |
| создаёт tuple левосторонних ссылок или распаковывает кортеж на отдельные объекты (шаблон функции) | |
| (C++11) |
создаёт tuple пересылалаемых ссылок (шаблон функции) |
| (C++11) |
создаёт tuple, объединяя любое количество кортежей (шаблон функции) |
| (C++11) |
доступ к определённому элементу кортежа (шаблон функции) |
| (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (C++20) |
лексикографически сравнивает значения в кортеже (шаблон функции) |
| (C++11) |
специализация алгоритма std::swap (шаблон функции) |
[править] Вспомогательные классы
| (C++11) |
получает размер tuple во время компиляции (специализация шаблона класса) |
| получает тип указанного элемента (специализация шаблона класса) | |
| специализация свойств типа std::uses_allocator (специализация шаблона класса) | |
определяет общий ссылочный тип двух tuple и tuple подобного типов (специализация шаблона класса) | |
определяет общий тип tuple и tuple подобного типа (специализация шаблона класса) | |
| (C++11) |
заполнитель для пропуска элемента при распаковке tuple с помощью tie (константа) |
[править] Руководства по выводу (начиная с C++17)
[править] Примечание
До N4387 (применяемого как отчёт о дефектах для C++11), функция не могла вернуть кортеж, используя копирование-списка-инициализации:
std::tuple<int, int> foo_tuple() { return {1, -1}; // Ошибка до N4387 return std::tuple<int, int>{1, -1}; // Всегда работает return std::make_tuple(1, -1); // Всегда работает }
[править] Пример
#include <tuple> #include <iostream> #include <string> #include <stdexcept> std::tuple<double, char, std::string> get_student(int id) { if (id == 0) return std::make_tuple(3.8, 'A', "Лиза Симпсон"); if (id == 1) return std::make_tuple(2.9, 'C', "Милхаус Ван Хаутен"); if (id == 2) return std::make_tuple(1.7, 'D', "Ральф Виггам"); throw std::invalid_argument("id"); } int main() { auto student0 = get_student(0); std::cout << "ИД: 0, " << "Средний балл: " << std::get<0>(student0) << ", " << "категория: " << std::get<1>(student0) << ", " << "имя: " << std::get<2>(student0) << '\n'; double gpa1; char grade1; std::string name1; std::tie(gpa1, grade1, name1) = get_student(1); std::cout << "ИД: 1, " << "Средний балл: " << gpa1 << ", " << "категория: " << grade1 << ", " << "имя: " << name1 << '\n'; // Структурная привязка C++17: auto [ gpa2, grade2, name2 ] = get_student(2); std::cout << "ИД: 2, " << "Средний балл: " << gpa2 << ", " << "категория: " << grade2 << ", " << "имя: " << name2 << '\n'; }
Вывод:
ИД: 0, Средний балл: 3.8, категория: A, имя: Лиза Симпсон ИД: 1, Средний балл: 2.9, категория: C, имя: Милхаус Ван Хаутен ИД: 2, Средний балл: 1.7, категория: D, имя: Ральф Виггам
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 2796 | C++11 | тривиальность деструктора tuple не определена
|
определена |
[править] Ссылки
- C++23 стандарт (ISO/IEC 14882:2023):
- 22.4 Кортежи [tuple]
- C++20 стандарт (ISO/IEC 14882:2020):
- 20.5 Кортежи [tuple]
- C++17 стандарт (ISO/IEC 14882:2017):
- 23.5 Кортежи [tuple]
- C++14 стандарт (ISO/IEC 14882:2014):
- 20.4 Кортежи [tuple]
- C++11 стандарт (ISO/IEC 14882:2011):
- 20.4 Кортежи [tuple]
[править] Смотрите также
| реализует двойной кортеж, т.е. пару значений (шаблон класса) | |

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
