好的,所以通过阅读this question,我已经明白了\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.)
这是我的代码:
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[n]\nx[0] x[1] x[n]\n(...)"
而不是"x[0] x[1] x[n] \nx[0] x[1] x[n] \n(...)"
?
答案 0 :(得分:3)
使用它,代码变得相当简单:
#include "infix_iterator"
std::cout << t << " ";
std::copy(x.begin(), x.end(), infix_ostream_iterator<double>(std::cout, " "));
std::cout << "\n";
答案 1 :(得分: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");
答案 2 :(得分:1)
在打印号码后检查是否打印最后一个号码:
for (int i = 0; i < N; i++) {
std::printf("%f", x[i]);
if (i != N-1) {
std::putc(' ');
}
}
如果您的基准测试显示比较是瓶颈,而不是I / O,您可以分开循环并分别处理最后一个案例:
int i;
for (i = 0; i < N-1; i++) {
std::printf("%f ", x[i]);
}
if (i < N) {
std::printf("%f", x[i]);
}