Espacios de nombres
Variantes
Acciones

std::tuple

De cppreference.com
< cpp‎ | utility
 
 
Biblioteca de servicios
 
 
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 tuple es trivial.

(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)[editar]
Crea una tupla de referencias lvalue o desempaca una tupla en objetos individuales.
(plantilla de función)[editar]
Crea una tupla de referencias r-valor.
(plantilla de función)[editar]
Crea una tupla mediante la concatenación de cualquier número de tuplas.
(plantilla de función)[editar]
La tupla accede al elemento especificado.
(plantilla de función)[editar]
Compara lexicográficamente los valores de la tupla
(plantilla de función)[editar]
Especializa el algoritmo std::swap.
(plantilla de función)[editar]

[editar]Clases asistentes

Obtiene el tamaño de una tupla en tiempo de compilación.
(especialización de plantilla de clase)[editar]
Obtiene el tipo del elemento especificado.
(especialización de plantilla de clase)[editar]
Especializa el rasgo de tipo std::uses_allocator.
(especialización de plantilla de clase)[editar]
Marcador de posición para saltarse un elemento cuando se desempaca una tupla utilizando tie.
(constante)[editar]

[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

#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]
close