Кратко:
Кортежи (tuples) в C++ — это контейнеры, которые могут содержать фиксированное количество элементов разных типов.
Синтаксис
#include <tuple>
std::tuple<int, double, std::string> t(1, 2.5, "example");
Свойства
- Могут содержать элементы различных типов.
- Поддерживают произвольное количество элементов.
- Предоставляют доступ к элементам по индексу.
- Могут быть сравнены, если все элементы поддерживают операторы сравнения.
Примеры кода
Создание и использование кортежей
#include <iostream>
#include <tuple>
#include <string>
int main() {
// Создание кортежа
std::tuple<int, double, std::string> t(1, 2.5, "example");
// Доступ к элементам кортежа с использованием std::get
std::cout << std::get<0>(t) << " "; // Output: 1
std::cout << std::get<1>(t) << " "; // Output: 2.5
std::cout << std::get<2>(t) << std::endl; // Output: example
// Изменение значений элементов кортежа
std::get<1>(t) = 3.5;
std::cout << std::get<1>(t) << std::endl; // Output: 3.5
return 0;
}
Разложение кортежа
#include <iostream>
#include <tuple>
#include <string>
int main() {
std::tuple<int, double, std::string> t(1, 2.5, "example");
// Разложение кортежа на переменные
int i;
double d;
std::string s;
std::tie(i, d, s) = t;
std::cout << i << " " << d << " " << s << std::endl; // Output: 1 2.5 example
return 0;
}
Использование std::make_tuple и std::tie
#include <iostream>
#include <tuple>
#include <string>
int main() {
// Использование std::make_tuple для создания кортежа
auto t = std::make_tuple(1, 2.5, "example");
// Использование std::tie для разложения кортежа
int i;
double d;
std::string s;
std::tie(i, d, s) = t;
std::cout << i << " " << d << " " << s << std::endl; // Output: 1 2.5 example
return 0;
}
Применение кортежей в функциях
#include <iostream>
#include <tuple>
#include <string>
// Функция, возвращающая кортеж
std::tuple<int, double, std::string> getValues() {
return std::make_tuple(1, 2.5, "example");
}
int main() {
auto [i, d, s] = getValues();
std::cout << i << " " << d << " " << s << std::endl; // Output: 1 2.5 example
return 0;
}