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 N4387return std::tuple<int, int>{1, -1};// siempre funcionareturnstd::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)returnstd::make_tuple(3.8, 'A', "Alicia Alderete");if(id ==1)returnstd::make_tuple(2.9, 'C', "Benito Barajas");if(id ==2)returnstd::make_tuple(1.7, 'D', "Carlos Cabello");throwstd::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 estructuradoauto[ 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]