我想更改 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;
}
}
注意:如果您不使用 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/