我现在多次遇到这个问题,并且想知道是否有人可以解释为什么会发生这种情况?在这里,我正在编写一个程序,将不同排序操作的运行时输出到表中。当我添加“为什么这会使它工作”cout语句时,它的工作原理。没有它,它就没有了,压痕就会被抛弃。
cout << "Size Selection Insert Bubble Shell Merge Heapsort Quicksort STL" << endl;
for(int i = 50; i <= 6400; i *= 2) { // Prints table
cout << "Why does this make it work" << endl;
for(int j = 0; j < i; j++) { // Creates random vector
v.push_back(rand());
}
vector<int>& arr = v;
// arr = &v;
cout << setw(4) << i;
start = clock();
SelectionSort(arr);
cout << setw(10) << clock() - start;
start = clock();
InsertionSort(arr);
cout << setw(10) << clock() - start;
start = clock();
BubbleSort(arr);
cout << setw(10) << clock() - start;
start = clock();
ShellSort(arr);
cout << setw(10) << clock() - start;
start = clock();
MergeSort(arr);
cout << setw(10) << clock() - start;
start = clock();
HeapSort(arr);
cout << setw(10) << clock() - start;
start = clock();
QuickSort(arr);
cout << setw(10) << clock() - start;
start = clock();
sort(arr.begin(), arr.end());
cout << setw(10) << clock() - start;
}
答案 0 :(得分:2)
据我所知,“为什么这会使它工作”行是唯一一个包含endl的行。因此,如果没有endl,当文本到达窗口的末尾时,控制台会包裹该行(它不会真正改变行,它只会包装当前的行)。
看起来像新行的内容很可能包含“上一行”的一些遗留物,因此文本看起来并不像预期的那样。
使用endl,您将切换到下一行,文本真正从头开始。
答案 1 :(得分:0)
您的示例没有给出您想要的答案的原因是,std::ostream
不会将每个输出发送到输出,而是将缓存数据并仅在其内部缓存已满时将其发送到输出或者当您致电flush
时,std::endl
也会为您致电flush
!并导致您看到您的输出。尝试用cout.flush()
替换它,你会发现每件事情都会好起来的!