Skip to content

[Boost en español III] Tuplas

14 julio 2010

Las tuplas en C++ son una versión generalizada de std::pair, en las que podremos almacenar un número arbitrario de valores de distinto tipo.

Al formar parte de TR1, podréis encontrarlas:

  • En la cabecera boost/tuple/tuple.hpp, como boost::tuple.
  • En la biblioteca estándar, en la cabecera tr1/tuple, como std::tr1::tuple.

Las tuplas se declaran de manera similar a los pares, indicando la cantidad y tipos de los datos contenidos como parámetros de plantilla. Podemos inicializar los datos pasándole los valores al constructor.

boost::tuple<int, string, string> miTupla (1, "Cisco", "Pepe");

Para los pares, se utilizaba first y second para acceder a los datos, pero al tener un número variable de elementos, con las tuplas hace falta alguna forma más genérica. Para ello se proporciona la función paramétrica get, que recibe como parámetro de plantilla el índice el elemento al que queremos acceder. Al devolver una referencia, nos servirá tanto de getter como de setter.

string cadena = miTupla.get<1>();
miTupla.get<0>() = 5;

Otra de las utilidades que vienen con las tuplas es tie, que nos permitirá darle valor a varias variables de una vez, incluso utilizando el valor de retorno de una función. Además, tie funciona tanto con tuplas como con los pares tradicionales.

pair<int, int> fun (){
    return make_pair(5, 3);
}

int main(int argc, char *argv[])
{
    int a, b;
    tr1::tie(a, b) = fun();
    printf("a:%i, b:%i\n", a, b);
}

Las tuplas traen muchas más funciones y utilidades, como por ejemplo para personalizar los operadores de flujos facilitando la entrada y salida, y muchas otras opciones que podéis observar en la documentación oficial.

One Comment leave one →
  1. 14 julio 2010 17:23

    Anda, si es parte de la TR y todo… mira, por lo menos han traído un primo hermano de la asignación múltiple que tanto me gustaba de Python.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: