2017-11-28 5 views
4

boost::formatを使ってintの固有ベクトルを計算し、その数が右寄せになるようにしたいと思います。これまでのところ私ならば、私は希望の結果を得ることができ、私は次のコードブースト形式のintの固有ベクトルを作成した

int main(){ 
vector<Vector3i> foo; Vector3i bar; 

bar << -1,-1,0; foo.push_back(bar); 
bar << 0, 0,0; foo.push_back(bar); 

boost::format header("%3d"); 

for (int i = 0; i < 2; ++i) 
    cout << header % foo[i].transpose() << endl; 

return 0; 
} 

を持っており、出力は

-1 -1 0 
0 0 0 

あるしかし、私は次の出力

-1 -1 0 
0 0 0 

を持つことを希望していますfor内の書式とコードを次のように変更しました

boost::format header2("%2d %2d %2d"); 
for (int i = 0; i < 2; ++i) 
    cout << header2 % foo[i](0) % foo[i](1) % foo[i](2) << endl; 

boost::formatを使用してこれを行うより効率的な方法があるかどうか教えてもらえますか?

あなたは回避策を使用することができます

答えて

0

boost::format header("%+3d"); // Add "+" when is not negative 

これは、次のような出力を生成します:

-1 -1 +0 
+0 +0 +0 

をし、また、あなたがこのようcolumsの区切り文字を設定するEigen::IOFormatを使用することができます。if (特に便利に項目の桁数が異なります)

boost::format header("%3d"); 
       //(precision,flags,coeffSeparator,rowSeparator,rowPrefix,rowSuffix) 
    IOFormat Fmt(3, 0, "\t", "\n", "", ""); 
    cout << header % foo[i].transpose().format(Fmt) << endl; 

utput:

-1 -1 0 
0  0  0 

または組み合わせた2つのトリック:

int main(){ 
vector<Vector3i> foo; Vector3i bar; 

bar << -1,-1,0; foo.push_back(bar); 
bar << 0, 0,0; foo.push_back(bar); 

boost::format header("%+3d"); 
IOFormat Fmt(3, 0, "\t", "\n", "", ""); 

for (int i = 0; i < 2; ++i) 
    cout << header % foo[i].transpose().format(Fmt) << endl; 

return 0; 
} 

出力:提案のための

-1 -1 +0 
+0 +0 +0 
+0

おかげで、私はしたくないので、それは私が探しているものを実際にはありませんその "+"記号を持つこと。これをスペースで置き換える方法はありますか?私は '(%+ 3d ')'を '(%3d")に変更しようとしましたが、うまくいきませんでした。そして、「IOFormat」は本当に役に立たない。 – rnels12

関連する問題