2017-11-28 2 views
4

숫자가 오른쪽 정렬되도록 boost::format을 사용하는 int의 고유 벡터를 사용하고 싶습니다. 지금까지 나는 다음과 같은 코드부스트 형식으로 int의 Eigen-vectors 형식을 사용했습니다.

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를 사용할 수있는 다음의 경우 (특히 유용 항목의 자릿수가 다릅니다.)

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 

또는 두 개의 트릭 결합 :

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

관련 문제