2016-10-06 122 views
0

我試圖做一個函數,重新排列矢量的元素,如果它不是升序。我寫了這個,但是當我編譯它,我得到:爲什麼我得到std :: out_of_range錯誤?

拋出的一個實例「的std :: out_of_range」什麼()終止後,被稱爲:矢量:: _ M_range_check

有人能告訴我什麼是我的功能錯了?謝謝。

void reorder(vector<double>& orderA) 
{ 
    for (unsigned int i = 0; i < orderAngle.size(); ++i) 
    { 
     temp = orderA.at(i); 
     orderA.at(i) = orderA.at(i+1); 
     orderA.at(i+1) = temp; 
    } 

    return; 
} 
+7

我+ 1超出範圍,當i = orderAngle.size() - 1,最重要的是,代碼不會做它應該。你需要全面的分類功能。 – Incomputable

+0

當你的計數器等於'大小-1'時,它將嘗試獲取最後一個元素和下一個不存在的元素。你的循環函數應該是'i

+0

總是在你的函數的末尾寫入'return'。如果你忘記寫它,函數將永遠執行。 –

回答

0

1作爲由Olzhas的評論中提到,你的代碼將走出去的範圍時,我等於orderAngle.size(),所以你需要爲循環更改到:

for(unsigned int i = 0; i < orderAngle.size() - 1; ++i) 

2-您的算法沒有達到您想要達到的效果。

3-你真的需要編寫自己的算法來排序雙打向量嗎? 如何使用如下代碼東西:

sort(vec.begin(), vec.end(), [](double x, double y) { 

    return (x < y); 
});