次のようなものがあるとします。
std::ostringstream oss;
int value(42);
oss.fill('0');
oss << std::setw(3) << value;
cout << oss.str();
出力:042
この出力は、std :: setwが最小幅を保証し、ストリームに0で埋めるように指示したためですが、STLおよびネイティブC ++で表示が切り捨てられるように、逆の方法で最大幅を指定するにはどうすればよいですか...
現在、私は醜く非効率的なハックと考えるものを持っています:
std::ostringstream oss;
int value(1239999);
oss.fill('0');
oss << std::setw(3) << boost::lexical_cast<std::string, int>(value).substr(0, 3);
cout << oss.str();
出力:123
私はboost::formatを見てきましたが、これを「きれいに」行う方法がないと言える限り、同じ話です...何か提案はありますか?
更新:std :: ostringstreamおよびSTLストリームは、一般に、STLの他のコンテナーおよびテンプレートオブジェクトと比較してパフォーマンスが遅いことが知られています。おそらく、std :: queueをラップして内部的に使用し、フォーマットの目的でsprintf_sを使用するメッセージキューオブジェクトを作成したほうがよいでしょうか。