2012-11-30 2 views
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; 
    } 
+1

출력의 예를 들려 줄 수 있습니까? – GManNickG

+0

그 줄을 끝내는 유일한 코드가 맞습니까? 어딘가에'endl'을 출력하면됩니다. –

+0

각 정렬 전에 배열을 재설정하지 마십시오. 'SelectionSort' 후에 정렬하기가 훨씬 쉽습니다. 편집 : 물론, 그들이 배열의 복사본을 가져다하지 않는 한? –

답변

2

내가 볼 수있는 한, "이것이 왜 효과가 있나"라는 말은 endl을 포함하는 유일한 줄입니다. 따라서 콘솔이 텍스트가 창 끝에 도달하면 콘솔이 줄을 감 쌉니다 (실제로 줄을 바꾸지 않고 현재 줄만 바꿉니다).

대개 새 줄과 같이 보이는 부분에는 "이전"줄의 일부가 남아 있으므로 텍스트가 예상대로 표시되지 않습니다.

endl을 사용하면 다음 줄로 바뀌므로 텍스트가 처음부터 실제로 시작됩니다.

+0

고마워! 이제는 의미가 있습니다. 왜 내가 혼자 생각할 수 없었는지 모르겠다. 하하 고마워요! – Genet022

0

귀하의 예제는 당신에게 원하는 대답을하지 않는 이유는 내부 캐시가 가득 찼을 때 std::ostream 대신이 데이터를 캐시됩니다 만 출력에 보내, 출력에 매 출력을 보내지 마십시오입니다 또는 flush으로 전화하면 std::endl 번으로 flush 번으로 전화 할 것입니다. 출력물을 보게하십시오. cout.flush()으로 교체하면 모든 것이 잘 될 것입니다.