2015-04-26 108 views
-2

我被困在我的任務的一部分。我不確定C型數組究竟是什麼。當我排序一個正常的數組時,排序功能起作用。但是,我在我的代碼中嘗試對C樣式數組進行排序時出現紅色波浪形。有什麼我做錯了嗎?將不勝感激任何幫助。提前致謝。排序C風格陣列

// Goal: To populate a C-style array of 40 million elements with random values between 
    //   1 and 4 billion and then sort via sort() algorithm. Note that you should use the new 
    //   operator to allocate the array. 

    // NOTE: The array is created/initialized with with 40 million elements using new operator. 

    start_time = time(NULL); // record start time 

    { 

     size_t *a1 = new size_t[forty_million]; 

     for (int i = 0; i < forty_million; ++i) 
     { 
      a1[i] = randomInt(engine); 
     } 

     sort(a1.begin(), a1.end()); 

    } 

    end_time = time(NULL); // record end time 
    total_time = end_time - start_time; // calculate time to compute 
    cout << "It took " << static_cast<long>(total_time) << " seconds to compute Part " << part++ << "\n" << endl; 
+2

你是什麼意思「我得到一個紅色波浪」,並準確你在哪裏得到的是「紅色波浪」 ??? –

+0

當您嘗試構建您的代碼時,您的編譯器是否會發出錯誤?僅僅因爲你的IDE說有一個錯誤並不意味着它確實存在。如果你遇到編譯器錯誤,你應該編輯你的文章並將其包含在那裏。 –

+0

*不,請等待......製作'five_million'!* – Sebivor

回答

1

我不確定您的意思是red squiggly line,但我的猜測是,您的IDE強調您的代碼的某個部分表明它可能不正確。根據你的問題,我最好的猜測是,你的錯誤路線是

sort(a1.begin(), a1.end()); 

,並可能因爲a1不是容器。這個推理是借鑑你對術語C-Style數組的引用。

C-style array是內存中連續元素的同類集合的非標準庫實現。

這樣的數組並不是純粹的面向對象的術語中的對象,也沒有方法(C++中的成員函數)和屬性(C++中的數據成員)。

當然,您可能無法執行方法調用來獲取開始和結束迭代器,指示數組的開始和結束。

幸運的是有幾個方式出局

  1. 如果您正在使用C++ 11及以後,你可以利用獨立功能的調用成員函數std::beginstd::end代替

    sort(std::begin(a1), std::end(a1)); 
    
  2. 如果數組的大小已知,則可以將其添加到數組中以獲取數組的末尾。

    sort(a1, a1 + sizeof(a1)/sizeof(a1[0])); 
    

    甚至更​​好

    template < typename Ty, size_t N > 
    size_t countof(Ty (& arr)[ N ]) 
    { 
        return N; 
    } 
    ................. 
    sort(a1, a1 + N); 
    
+0

也許你可以引用你的回答,提到「紅色波浪線」可能表示一個錯誤,並從那裏開始工作,添加一個「,這可能是錯誤信息告訴你」在你當前的答案中的某處。 – Sebivor

+1

@undefinedbehaviour:我不確定,我怎麼能做到這一點,儘管我盡了最大的努力給予溫柔的介紹(見我的編輯)。 – Abhijit

+0

你在1)處有一個錯字,你想'std :: begin(a1)',而不是'std :: begin(a1.begin)'。 'std :: begin/end'只能用於數組,而不能用於指針。 「 – vsoftco