0

我现在多次遇到这个问题,想知道是否有人可以解释为什么会发生这种情况?在这里,我正在编写一个程序,将不同排序操作的运行时间输出到表中。当我添加“为什么这使它起作用” 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;
  }
4

2 回答 2

2

据我所见,“为什么这使它起作用”行是唯一包含 endl 的行。因此,如果没有 endl,当您的文本到达窗口末尾时,控制台会换行(它不会真正改变行,它只会换行当前行)。

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

使用 endl 您将更改为下一行,并且文本实际上是从开头开始的。

于 2012-12-01T00:34:45.350 回答
0

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

于 2012-12-01T00:09:42.293 回答