gpt4 book ai didi

c++ - 试图对C++中的数字列表进行排序

转载 作者:行者123 更新时间:2023-12-01 14:43:23 27 4
gpt4 key购买 nike

我正在尝试通过将填充有随机值的用户设置长度列表传递给将对元素进行升序排序的函数来对数字列表进行排序。

在使用数组之前,我已经完成了此问题,并且没有任何问题。出于某种原因,我的代码无法正常工作,如果你们可以帮助我找出原因,我将不胜感激。它将对数字排序,但最后一个数字将不排序。

这是函数:

void sort(std::list<int>& numbers)
{
list<int>::iterator it;
list<int>::iterator it2;
for (it = numbers.begin(); it != numbers.end(); ++it)
{
for (it2 = ++numbers.begin(); it2 != numbers.end(); ++it2)
{
if (*it > *it2)
{
int temp = *it;
*it = *it2;
*it2 = temp;
}
}
}
}

最佳答案

您的算法无效,因为第二个循环总是(几乎)遍历整个列表。它应该做的只是遍历其余部分。
即第二个周期应该是:

for (it2 = std::next(it1); it2 != numbers.end(); ++it2)

同样,由于第二个循环以“next”元素开始,因此第一个循环不应一直到最后一个元素,而应倒数第二个元素。
即像这样的东西:
for (it = numbers.begin(); it != std::prev(numbers.end()); ++it)

但是,由于 std::prev()仅为双向迭代器定义,而 std::list不提供双向迭代器,因此将其重写为:
for (it = numbers.begin(); std::next(it) != numbers.end(); ++it)

关于c++ - 试图对C++中的数字列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60314976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com