【发布时间】:2018-11-13 15:26:14
【问题描述】:
我想创建一个函数来对随机数进行排序(使用另一个函数生成),我一直在尝试这样做一段时间,但没有任何效果。现在我有一个问题,有时我的程序编译时没有任何问题,有时它说“向量下标超出范围”,即使它编译正确,它也会以错误的顺序插入一些数字(尤其是当要排序的下一个数字小于前一个)。我尝试使用调试器并找出问题所在,但对我来说一切似乎都很好。你能这么好心并帮助我吗?非常感谢。
std::vector <int> insertion_sort(std::vector <int> generated)
{
using namespace std;
bool emplaced = false;
vector <int> buffor(1);
buffor[0] = generated[0];
for (int i = 1; i < generated.size(); i++)
{
emplaced = false;
if (generated[i] >= buffor[i-1])
{
buffor.push_back(generated[i]);
}
else
{
int x = 2;
while (((i - x) > -1))
{
if (emplaced == true)
{
break;
}
if ((i - x) == 0)
{
buffor.emplace(buffor.begin(), generated[i]);
emplaced = true;
}
if (generated[i] < bufor[i - x])
{
}
else
{
buffor.emplace(buffor.begin() + (i-x), generated[i]);
emplaced == true;
}
x++;
}
}
}
return buffor;
}
【问题讨论】:
-
1) "vector subscript out of range" 不是编译错误。这很可能是运行时断言失败。 2) 请提供minimal reproducible example。 3) 您是否尝试过使用调试器单步执行您的代码?
-
顺便说一句,为什么不使用
std::sort? -
我做到了,但我注意到的只是程序的排序数字小于已排序的数字(缓冲向量中的数字)。我必须创建自己的函数作为我的 IT 学习的练习。例如,如果输入(整数向量)是: 96 99 24 46 58 40 78 24 它显示: 78 78 46 78 46 78 24 78 46 78 24 96 99 58 40 24 但是如果输入是: 58 49 82 72 61 87 74 21 然后我得到“向量下标超出范围”
-
输入(整数向量)是:96 99 24 46 58 40 78 24 它显示:78 78 46 78 46 78 24 78 46 78 24 96 99 58 40 24 : 这是预期的结果吗??
-
预期结果是 24 24 40 46 58 78 96 99
标签: c++ function for-loop vector insertion-sort