Entries for C++
Argumentos en Python
28 March 2012
Para los programadores de C, C++, Java, ... puede resultar un tanto extraño la forma de gestionar los parámetros que tiene Python.
Voy a explicar en esta entrada los tipos de parámetros y cómo podemos hacer uso de ellos.
Jugando con Automake para generar Makefiles automáticos
14 December 2010
Estos días estoy empezando a implemetar un pequeño programita para un Reto Tecnológico que organiza el Departamento de Teoría de la Señal, Telemática y Comunicaciones de la Universidad de Granada. Lo estoy desarrollando en C++ y sinceramente no me apetece hacer el Makefile. Así que estoy aprendiendo a usar las Autotools de GNU, empezando por Automake.
Functores y ordenación mediante sort en la STL
5 December 2010
La STL, o Standard Template Library, es un conjunto de plantillas para C++ que facilitan la vida al programador, y además de una forma eficiente.
Para quién no lo conozca, un Functor o Function Object es un objeto que puede ser invocado como una función. Por tanto, nos estamos refiriendo a la instancia de a una clase o a una estructura, la cuál tiene definido el operator().
Enteros de mayor precisión en Java
17 June 2010
Ahora mismo estoy desarrollando una práctica en la que necesito generar números de 128 bits y escribirlos en un fichero en formato decimal, formato hexadecimal y formato binario.
Empecé jugueteando con C++, y mi sorpresa fue que un long long int utiliza 64 bits bajo una arquitectura de 64 bits. Como el estándar de C/C++ no especifica el tamaño de los tipos de datos esperaba que la últimas versiones del compilador (g++ para ser concretos) utilizasen mayor precisión. Tras esto descarté C++. Existen librerías, como GMP, que nos permiten trabajar con datos de mayor precisión, pero no dispongo de tiempo para investigar.
Lo siguiente en venirme a la cabeza fue Python. La ventaja (y en este caso desventaja) de usar Python es que Python utiliza precisión arbitraria. Esto es, que tú asignas a una variable un entero y te puedes despreocupar. Python asigna dinámicamente el tipo de dato int a la variable, pero si esta crece, en lugar de producir un overflow, le asigna el tipo de dato long y continúa con la ejecución. A partir de ahí, el tipo de dato long crece (reserva de memoria automática) en función de la precisión que necesite. Esto me impide limitar los enteros a 128 bits :(
La opción por la que he optado: Java.
Una de iteradores en C++
29 May 2010
Ayer, mi colega Antares me planteó un problema (y yo no sé decir que no a los problemas). Está desarrollando un contenedor en el cuál necesita tener iteradores e iteradores constantes para recorrer los elementos. Probando los iteradores constantes, utilizó el siguiente código:
Contenedor c;
for(Contenedor::const_iterator it = c.begin(); it != c.end(); ++it)
{
...
}
Pero el compilador arrojaba el siguiente error:
contenedor.cpp:474: error: conversion from ‘Contenedor::iterator’ to non-scalar type ‘Contenedor::const_iterator’ requested
contenedor.cpp:474: error: no match for ‘operator!=’ in ‘ite != Contenedor::end()()’
contenedor.h:226: note: candidates are: bool Contenedor::const_iterator::operator!=(const Contenedor::const_iterator&) const
Breves: Inicializar una variable a infinito en C++
29 May 2010
En algunas ocasiones, nos encontramos con que necesitamos inicializar una variable al mayor valor posible. Por ejemplo, supongamos un programa que acepta por entrada estándar un número indeterminado de números reales (pudiendo no introducir ninguno) y queremos que se devuelva el menor de todos los números introducidos. En caso de que no se introduzca ninguno, el programa informará de ello.
Breves: Forzar la lectura de un entero en C++
11 May 2010
Cuando estamos programando en C++ y leemos un entero por terminal, nadie garantiza que realmente se lea. Imaginemos lo siguiente:
int entero;
cin >> entero;
Y cuando se ejecuta el programa, el usuario escribe una 'a'. ¿Qué ocurre? Pues que el programa se sigue ejecutando y el entero no se ha leído.
Breves: Leer de cin después de cerrarlo en C++
11 May 2010
Vamos a ponernos en contexto. Estaba escribiendo un programita en C++ el cuál hace uso de una función que lee desde un flujo (en este caso cin) hasta que encuentra EOF. Escribiendo en terminal podemos simular un fin de fichero pulsando Ctrl+D, pero como consecuencia, también cierra el flujo o lo que es lo mismo, ya no podemos seguir leyendo más datos a través de cin. Todo intento de lectura dará un error.
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
