Post actualizado: Simplificando el empleo de std::cin

El artículo 'Simplificando el empleo de std::cin' publicado originalmente en febrero de 2019 ha sido reescrito de forma sustancial, proporcionando una pequeña biblioteca para C++20 que facilita la adquisición de datos desde la terminal. Puede accederse a él pinchando sobre el enlace anterior.

El post actualizado incluye la implementación de tres funciones genéricas:

  • terminal::prompt: Imprime un mensaje en la terminal y aguarda a que el usuario introduzca el dato solicitado. Si el input es válido, éste es almacenado en una variable capturada por referencia. En caso contrario, vuelve a solicitarse el dato. Opcionalmente, es posible proporcionar una condición que deba ser satisfecha por el input.
  • terminal::prompt_init: Una función auxiliar similar a la anterior que inicializa ella misma por defecto una variable del tipo a leer y procede a su lectura por la terminal.
  • terminal::prompt_loop: Extiende la lista de argumentos de prompt() con una palabra clave centinela configurable por el programador, capaz de interrumpir bucles for y while.
A modo de ejemplo:

   auto d = 0.0;    terminal::prompt("Insert a double > 0.0: ", d, [](auto a){ return a > 0.0; });    auto const s = terminal::prompt_init<string>("Insert a non-empty string: ",                                                 [](auto const& w){ return !w.empty(); });

Programando con C++20 (Parte III): Funciones std::erase y std::erase_if

Artículos de la serie:

Introducción

Consideremos el problema de eliminar de un contenedor estándar todos aquellos elementos que cumplan un criterio específico, bien porque éstos se comparen igual a un cierto valor dado o porque cumplan un determinado predicado unario. De emplear estándares previos a C++20, la consecución de una acción de este tipo en contenedores como std::vector, std::string o std::deque requeriría el uso de la solución idiomática conocida bajo el nombre de erase-remove [1]. En contraste, listas como std::list o std::forward_list permitirían usar funciones miembro públicas de eliminación específicas.