2016-10-06 123 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); 
});