Вы также можете рассмотреть более дружественную функциональность, предоставляемую одним из них:
- Boost.Format (мощный, но очень тяжелый, требует больше времени и памяти, чем другие упомянутые)
- Loki.SafeFormat
- FastFormat (относительно новая, но невероятно быстрая библиотека, также в отличие от других, безопасная для типов)
Запись по памяти, но должно быть что-то вроде этого:
// Dumb streams:
printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345);
// For IOStreams you've got example in the other answers
// Boost Format supports various flavours of formatting, for example:
std::cout << boost::format("%-14.3f%-14.3f\n") % a % b;
std::cout << boost::format("%1$-14.3f%2$-14.3f\n") % a % b;
// To gain somewhat on the performance you can store the formatters:
const boost::format foo("%1$-14.3f%2$-14.3f\n");
std::cout << boost::format(foo) % a % b;
// For the Loki::Printf it's also similar:
Loki::Printf("%-14.3f%-14.3f\n")(a)(b);
// And finally FastFormat.Format (don't know the syntax for decimal places)
fastformat::fmtln(std::cout, "{0,14,,<}{1,14,,>}", a, b);
Кроме того, если вы планируете придерживаться любой из этих библиотек форматирования, тщательно изучите их ограничения в контексте выразимости, переносимости (и других зависимостей библиотеки), эффективности, поддержки интернационализации, безопасности типов и т. Д.