繁体   English   中英

为什么我会收到std :: out_of_range错误?

[英]Why am I getting std::out_of_range error?

我正在尝试制作一个功能,如果不按升序排列,则可以对向量的元素进行重新排序。 我写了这个,但是当我编译它的时候得到了:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM