gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:51:28 30 4
gpt4 key购买 nike

我想更改 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/

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