我正在尝试创建一个函数来重新排序向量的元素,如果它不是按升序排列的。我写了这个,但是当我编译它时,我得到:
在抛出'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;
}
答案 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);
});