¿Hay alguna manera de configurar el manipulador std::setw
(o su función width
) de forma permanente? Mira esto:"Permanente" std :: setw
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <iterator>
int main(void)
{
int array[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256 };
std::cout.fill('0');
std::cout.flags(std::ios::hex);
std::cout.width(3);
std::copy(&array[0], &array[9], std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
for(int i = 0; i < 9; i++)
{
std::cout.width(3);
std::cout << array[i] << " ";
}
std::cout << std::endl;
}
Después de carrera, veo:
001 2 4 8 10 20 40 80 100
001 002 004 008 010 020 040 080 100
es decir, cada manipulador ocupa su lugar excepto el setw
/width
que se debe configurar para cada entrada. ¿Hay alguna manera elegante de cómo usar std::copy
(u otra cosa) junto con setw
? Y por elegante, ciertamente no me refiero a crear funtores o funciones propios para escribir cosas en std::cout
.
muy bonito diseño, que creo que sería aplicable a muchas situaciones Sería ideal si el ancho pudiera ser un parámetro de tiempo de ejecución (en lugar de tiempo de compilación), aunque no puedo pensar en una buena forma de obtener esta información "en" 'ostream_iterator'. También podría proporcionar una función de conveniencia 'template with_width (T v) {return FixedWidthVal (v, width); } 'para guardar tener que especificar el tipo. –
@j_random_hacker Bueno, debería dar crédito donde se debe el crédito. Adopté este enfoque desde [una pregunta de revisión de código] (http://codereview.stackexchange.com/q/18291/35254), simplemente agregando el parámetro de plantilla de tipo de datos. Buena sugerencia para la función de conveniencia. – chappjc