2015-01-17 2 views
0

그래, this question을 읽으면 \b\n이 정확히 무엇을하는지 이해했습니다. 나는 여전히 다음을 수행하는 방법을 모른다 :출력에서 ​​후행 공백을 어떻게 제거 할 수 있습니까?

나는 공간으로 구분 된 배열의 모든 요소를 ​​인쇄 한 다음, 그 배열에 대해 몇 가지 작업을 수행하고 배열의 모든 요소의 다른 세트 인 숫자를 인쇄해야한다. 각각의 집합은 줄 바꿈으로 구분됩니다. 이런 식으로 뭔가 :

std::printf("%f ",t); 
for(int i=0;i<N;i++) { 
    std::printf("%f ", x[i]); 
} 
std::printf("\b\n"); 

그러나이 각 줄의 끝에 후행 공백을 잎 :

x[0] x[1] x[2] x[n] 
x[0] x[1] x[2] x[n] 
x[0] x[1] x[2] x[n] 
(etc.) 

이 내 코드입니다. "x[0] x[1] x[n] \nx[0] x[1] x[n] \n(...)" 대신에 출력을 "x[0] x[1] x[n]\nx[0] x[1] x[n]\n(...)"으로 만들려면 어떻게해야합니까?

답변

1

확인 :

for (int i = 0; i < N; i++) { 
    std::printf("%f", x[i]); 
    if (i != N-1) { 
     std::putc(' '); 
    } 
} 

당신의 벤치 마크는 비교가 O, 당신이 할 수있는/차라리보다 병목 것을 보여 주면 루프를 분할하고 별도로 마지막 경우를 처리하십시오.

int i; 
for (i = 0; i < N-1; i++) { 
    std::printf("%f ", x[i]); 
} 
if (i < N) { 
    std::printf("%f", x[i]); 
} 
+0

글쎄,이 일을하지만 고성능 프로그램을 쓰고 있어요 그리고이 인쇄 사이클은 20-30 요소를 가진 배열과 함께 수천만 번 반복하는 루프에 삽입되므로 이것은 여러 가지 비교를 의미합니다. 10^8 ~ 10^9의 순서. 아마도 어리석은 짓이며 실제로는 중요하지 않지만 성능에 미치는 영향에 대해 걱정하고 있습니다. – andrepd

+1

실제 I/O 오버 헤드와 비교할 때 비교는 무시할 수 있습니다. – Barmar

+0

빙고. 이것은 정확히 제가 찾던 것입니다, 감사합니다. ('% f ", x [N]);') – andrepd

1

마지막 요소를 쓰지 않을 때만 공백을 추가하십시오. 당신이 수 후 공간을 인쇄하기 전에 마지막 번호를 인쇄하고 있는지

std::printf("%f ",t); 
for(int i=0;i<N;i++) { 
    std::printf("%f", x[i]); 
    if (i != N-1) 
    { 
     std::printf(" "); 
    } 
} 
std::printf("\n"); 
+0

글쎄,이 작업을 수행하지만 고성능 프로그램을 쓰고 있어요 및이 인쇄주기는 루프에 삽입되는 시간의 수백만의 반복의 수십 , 배열은 20-30 개의 원소를 가지므로, 이것은 10^8에서 10^9의 순서로 많은 비교를 의미합니다. 아마도 어리석은 짓이며 실제로는 중요하지 않지만 성능에 미치는 영향에 대해 걱정하고 있습니다. – andrepd

+0

병목 현상은 확실히 비교 코드가 아닌 디스크 IO가 될 것입니다. 총을 내고 당신이 찾은 것을 보아라. –

+0

실제로 코드를 내 코드로 교체하면 반복 횟수가 적어 * 2.5 * 1.8s가됩니다. o.O – andrepd

3

infix_ostream_iterator을 사용합니다. 코드는 매우 간단하게 것을 사용

:

#include "infix_iterator" 

std::cout << t << " "; 
std::copy(x.begin(), x.end(), infix_ostream_iterator<double>(std::cout, " ")); 
std::cout << "\n"; 
+0

다시 말하지만, 그 wrapper 대 Naked C를 사용하면 성능에 미치는 영향에 대해 걱정이됩니다. – andrepd

+0

@andrepd : 적어도 내 [testing] (http://stackoverflow.com/a/1926432/179910)을 기반으로하면 걱정할 필요가 없습니다. 아마 부당하다. –

관련 문제