c++ - 交换 std::list 中的相邻元素

标签 c++ sorting stl containers

我想更改 std::list 中相邻元素的位置

列表和值的示例

A B C D E F G
3 2 1 2 1 3 2

排序后我期望收到的内容:

A B D C F E G
3 2 2 1 3 1 2

所以,很简单 A > B = 无事可做,但 C < D = 交换它们并转到 E比较。

我不知道如何交换相邻元素。

所以,我想前进 1 步 good元素

最佳答案

您可以使用两个迭代器轻松地做到这一点:

void biswap(std::list<int> &l)
{
    if (l.size() < 2)
        return;
    auto it2 = l.begin();
    auto it1 = it2++;
    auto e = l.end();
    for (;;)
    {
        if (*it1 < *it2)
            std::swap(*it1, *it2);
        it1 = it2++;
        if (it2 == e)
            return;
        it1 = it2++;
        if (it2 == e)
            return;
    }
}

Live example

注意:如果您不使用 C++11 并因此调用 size()可能会带来很大的开销,您可以将其替换为这个(当然,将 auto 的所有用法替换为显式类型):

void biswap(std::list<int> &l)
{
    auto it2 = l.begin();
    auto e = l.end();
    if (it2 == e)
        return;
    auto it1 = it2++;
    if (it2 == e)
        return;
    for (;;)
    // ... the rest as before
}

关于c++ - 交换 std::list 中的相邻元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777941/

相关文章:

c# - 什么逻辑错误可能导致此处出现运行时错误?

java - 如何在java中对属性进行排序?

c++ - 按第一个值降序排列一组对,然后按第二个值的字母顺序排列

c++ - 在这种情况下使用 std::vector 的哪个构造函数

c++ - qt C++信号与槽中删除函数错误的使用

c++ - "The Rule of Zero"是否也适用于具有虚方法的类?

c++ - gcc 是否将 uint8_t 转换为单个值的 int?

python - 按链接名称对链接列表进行排序

c++ - 使用 STL 的列表对象

c++ - 按位分量和中的段错误