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

标签 c++ list sorting

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

我在使用数组之前已经解决过这个问题,没有任何问题。由于某种原因,我的代码无法工作,如果你们能帮助我找出它无法工作的原因,我将不胜感激。它将对数字进行排序,但最后一个数字将不排序。

这是函数:

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;
            }
        }
    }
}

最佳答案

你的算法不起作用,因为第二个循环总是一次又一次地遍历(几乎)整个列表。它应该做的,只是遍历剩余部分。 IE。第二个周期应该是:

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

此外,由于第二个循环从“下一个”元素开始,因此第一个循环不应直到最后一个元素,而是直到倒数第二个元素。 IE。像这样的东西:

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/

相关文章:

mysql - 通过自定义函数对数据库中的查询结果进行排序

c++ - Shell排序和排序验证

C++ PHP 扩展

c++ - 在构造函数初始化列表中调用非静态函数,C++

php - 如何从数据库中放入 <select> 类别和子类别?

list - python中限制列表的大小

c# - 我真的需要在集合上使用 AsQueryable() 吗?

arrays - 采访问题: How to find the most popular number in a sorted array

c++ - 如何检索两个地址,如下所述,用于 vector 指针保存每个 n 个 vector 的地址

c++ - 如何纠正 GDI 资源泄漏?