C++ iomanip expression

C++ iomanip expression

本文关键字:expression iomanip C++      更新时间:2023-10-16

变量:

static const float    s_period[]    = { 100, 50, 25, 12, 5, 7, 3, 2, 1 };
static const unsigned s_timersCount = sizeof( s_period ) / sizeof( s_period[0] );
float  min = 10000000;
float  max = 0;
double sum = 0.0;

C++版本:

for( unsigned i = 0; i < s_timersCount; ++i ) {
   ...
   std::cout
      << "id: "         << std::setw(2) << (i+1)
      << ", expected: " << std::setw(3) << s_period[i]
      << ", min: "      << std::setw(3) << min
      << ", max: "      << std::setw(3) << max
      << ", avg: "      << std::fixed << std::setw(10) << std::setprecision(6) << avg
      << std::endl;
   std::cout.unsetf( std::ios_base::floatfield );
}

C版本:

for( unsigned i = 0; i < s_timersCount; ++i ) {
   ...
   printf( "id: %2d, expected: %3.0f, min: %3.0f, max: %3.0f, avg: %10.6fn",
      ( i + 1 ), s_period[i], min, max, avg );
}

for循环在本例中很重要,因为我们必须为下一个循环重置ios_base::floatfield

C++版本比C版本更详细,你能提出一个更紧凑的C++版本吗

我不认为C++方法的冗长有问题;事实上,它似乎比C版本更容易阅读和理解。

也就是说,你可以通过boost.format:使用C++iostreams实现printf风格的格式化

#include <boost/format.hpp>
#include <iostream>
using boost::format;
using boost::io::group;
int main() {
    const float    s_period[]    = { 100, 50, 25, 12, 5, 7, 3, 2, 1 };
    const unsigned s_timersCount = sizeof( s_period ) / sizeof( s_period[0] );
    float  min = 10000000;
    float  max = 0;
    double sum = 0.0;
    for (size_t i = 0; i < s_timersCount; ++i) {
        // ...
        std::cout << format("id: %2d, expected: %3.0f, min: %3.0f, max: %3.0f, avg: %10.6fn")
                            % ( i + 1 ) % s_period[i] % min % max % sum;
    }
    return 0;
}

(实例(

相关文章: