gpt4 book ai didi

c++ - 具有 Boost 格式的 int 特征向量的格式化 cout

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:21:06 26 4
gpt4 key购买 nike

我想使用 boost::format 计算 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 来做到这一点?

最佳答案

您可以使用解决方法:

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

这将产生以下输出:

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

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

    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

关于c++ - 具有 Boost 格式的 int 特征向量的格式化 cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com