Est-il possible de régler le manipulateur std::setw
(ou sa fonction width
) de façon permanente? Regardez ceci:"permanent" 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;
}
Après l'exécution, je vois:
001 2 4 8 10 20 40 80 100
001 002 004 008 010 020 040 080 100
à savoir chaque manipulateur tient sa place sauf le setw
/width
qui doit être réglé pour chaque entrée. Y at-il une manière élégante comment utiliser std::copy
(ou autre chose) avec setw
? Et par élégant je ne veux certainement pas créer son propre foncteur ou fonction pour écrire des choses dans std::cout
.
design vraiment agréable, que je pense serait applicable à beaucoup de situations. Ce serait idéal si la largeur pouvait être un paramètre d'exécution (plutôt que de compilation), bien que je ne puisse pas trouver un moyen agréable d'obtenir cette information dans "ostream_iterator". Vous pouvez également fournir une fonction de commodité 'template with_width (T v) {return FixedWidthVal (v, largeur); } 'pour éviter d'avoir à spécifier le type. –
@j_random_hacker Bien, je devrais donner le crédit où le crédit est dû. J'ai adopté cette approche à partir de [une question codereview] (http://codereview.stackexchange.com/q/18291/35254), en ajoutant simplement le paramètre de modèle de type de données. Belle suggestion pour la fonction de commodité. – chappjc