用Boost格式形成int的特征向量的cout

时间:2017-11-28 14:10:48

标签: c++ vector boost format eigen

我想使用SELECT p.* FROM wp_posts p JOIN wp_term_relationships r ON r.object_id = p.ID JOIN wp_term_taxonomy tt ON tt.term_id = r.term_taxonomy_id JOIN wp_terms t ON tt.term_id = t.term_id WHERE p.post_status = 'publish' AND p.post_type = 'post' AND tt.taxonomy = 'category' AND t.term_id = 2 /* <--- Put your category id here */ ORDER BY p.ID DESC LIMIT 3 cout int的特征向量,使得数字是右对齐的。到目前为止,我有以下代码

boost::format

,输出

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; 是否有更有效的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用解决方法:

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

这将产生以下输出:

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

此外,您还可以使用Eigen::IOFormat设置colums分隔符,如下所示: (如果项目具有不同的位数,则特别有用)

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

输出:

-1    -1    0
0     0     0

或两个技巧相结合:

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