std::tuple
De cppreference.com
Definido en el archivo de encabezado <tuple>
|
||
template< class... Types > class tuple; |
(desde C++11) | |
La plantilla de clase std::tuple
es una colección de tamaño fijo de valores heterogéneos. Es una generalización de std::pair.
Si (std::is_trivially_destructible_v<Types> && ...) es true, el destructor de |
(desde C++17) |
Contenido |
[editar] Parámetros de plantilla
Types... | - | Los tipos de elementos que la tupla almacena. Se soporta una lista vacía. |
[editar] Funciones miembro
Construye una nueva tupla (función miembro pública) | |
Asigna el contenido de una tupla a otra. (función miembro pública) | |
Intercambia el contenido de dos tuplas. (función miembro pública) |
[editar] Funciones no miembro
Crea un objeto de tupla del tipo definido por los tipos de argumentos. (plantilla de función) | |
Crea una tupla de referencias lvalue o desempaca una tupla en objetos individuales. (plantilla de función) | |
Crea una tupla de referencias r-valor. (plantilla de función) | |
Crea una tupla mediante la concatenación de cualquier número de tuplas. (plantilla de función) | |
La tupla accede al elemento especificado. (plantilla de función) | |
Compara lexicográficamente los valores de la tupla (plantilla de función) | |
(C++11) |
Especializa el algoritmo std::swap. (plantilla de función) |
[editar] Clases asistentes
Obtiene el tamaño de una tupla en tiempo de compilación. (especialización de plantilla de clase) | |
Obtiene el tipo del elemento especificado. (especialización de plantilla de clase) | |
Especializa el rasgo de tipo std::uses_allocator. (especialización de plantilla de clase) | |
Marcador de posición para saltarse un elemento cuando se desempaca una tupla utilizando tie. (constante) |
[editar] Guías de deducción(desde C++17)
[editar] Notas
Hasta N4387 (aplicado como un informe de defecto de C++11), una función no podía devolver una tupla usando inicialización de lista de copia:
std::tuple<int, int> foo_tuple() { return {1, -1}; // ERROR hasta N4387 return std::tuple<int, int>{1, -1}; // siempre funciona return std::make_tuple(1, -1); // siempre funciona }
[editar] Ejemplo
Ejecuta este código
#include <tuple> #include <iostream> #include <string> #include <stdexcept> std::tuple<double, char, std::string> captar_estudiante(int id) { if (id == 0) return std::make_tuple(3.8, 'A', "Alicia Alderete"); if (id == 1) return std::make_tuple(2.9, 'C', "Benito Barajas"); if (id == 2) return std::make_tuple(1.7, 'D', "Carlos Cabello"); throw std::invalid_argument("id"); } int main() { auto estudiante0 = captar_estudiante(0); std::cout << "ID: 0, " << "PROM: " << std::get<0>(estudiante0) << ", " << "calif: " << std::get<1>(estudiante0) << ", " << "nombre: " << std::get<2>(estudiante0) << '\n'; double prom1; char calif1; std::string name1; std::tie(prom1, calif1, nombre1) = captar_estudiante(1); std::cout << "ID: 1, " << "PROM: " << prom1 << ", " << "calif: " << calif1 << ", " << "name: " << nombre1 << '\n'; // C++17: vínculo estructurado auto [ prom2, calif2, nombre2 ] = captar_estudiante(2); std::cout << "ID: 2, " << "PROM: " << nombre << ", " << "calif: " << calif2 << ", " << "nombre: " << nombre2 << '\n'; }
Salida:
ID: 0, PROM: 3.8, calif: A, nombre: Alicia Alderete ID: 1, PROM: 2.9, calif: C, nombre: Benito Barajas ID: 2, PROM: 1.7, calif: D, nombre: Carlos Cabello
[editar] Referencias
- El estándar C++17 (ISO/IEC 14882:2017):
- 23.5 Tuples [tuple]
- El estándar C++14 (ISO/IEC 14882:2014):
- 20.4 Tuples [tuple]
- El estándar C++11 (ISO/IEC 14882:2011):
- 20.4 Tuples [tuple]