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すべての出力を出力に送信しないでください。代わりに、データをキャッシュし、内部キャッシュがいっぱいになったとき、または呼び出したときにのみ出力に送信しflushますstd::endlflushあなたのために!出力が表示されます。に置き換えてみてcout.flush()ください。すべてがうまくいくことがわかります。

于 2012-12-01T00:09:42.293 に答える