C++ 添加cout语句可更正输出?

C++ 添加cout语句可更正输出?,c++,cout,C++,Cout,我已经多次遇到这个问题,想知道是否有人能解释为什么会发生这种情况?这里我正在编写一个程序,将不同排序操作的运行时输出到一个表中。当我在cout语句中添加一个“为什么这会使它工作”时,它就工作了。如果没有它,它就不会出现,缩进也会消失 cout << "Size Selection Insert Bubble Shell Merge Heapsort Quicksort STL" << endl; for(int i = 5

我已经多次遇到这个问题,想知道是否有人能解释为什么会发生这种情况?这里我正在编写一个程序,将不同排序操作的运行时输出到一个表中。当我在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;
  }

cout您的示例没有给出您想要的答案的原因是,
std::ostream
不要将每个输出都发送到输出,相反,它将缓存数据,并且仅在其内部缓存已满或您调用
flush
时将其发送到输出,
std::endl
将为您调用
flush
!并使您看到您的输出。试着用
cout.flush()
替换它,你会发现一切都会好起来的

据我所知,“为什么这会使它工作”行是唯一一个包含endl的行。因此,如果没有endl,当文本到达窗口末尾时,控制台将换行(它实际上不会更改行,它只换行当前行)

看起来像新行的内容很可能包含“上一行”的一些剩余内容,因此文本看起来不像预期的那样


有了endl,您将切换到下一行,而文本实际上是从开头开始的。

您能给出一个输出示例吗?这是唯一一行结束的代码,对吗?您只需要在某处输出一个
endl
。在每次排序之前,您不需要重置数组。在
SelectionSort
之后,他们可以更轻松地对其进行排序。编辑:当然,除非他们复制了数组?@sftrabbit,这将通过使用向量v的引用来完成。正确吗?e、 g.向量&arr=v;选择排序(arr);谢谢现在这是有道理的。我不知道为什么我自己不能想到这一点。哈哈,非常感谢!