为什么我得到std :: out_of_range错误?

时间:2016-10-06 23:14:32

标签: c++ c++11

我正在尝试创建一个函数来重新排序向量的元素,如果它不是按升序排列的。我写了这个,但是当我编译它时,我得到:

  

在抛出'std :: out_of_range'的实例后调用终止what():vector :: _ 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;
}

1 个答案:

答案 0 :(得分:0)

1-正如Olzhas的评论中所提到的,当我变得等于orderAngle.size()时,你的代码将超出范围,所以你需要将for循环更改为:

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

2-您的算法无法实现您想要达到的目标。

3-你真的需要编写自己的算法来对双打矢量进行排序吗? 如何使用类似下面的代码:

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

   return (x < y);
});