C++ list,怎么交换任意两个元素的位置?
发布日期:2021-06-30 18:07:06 浏览次数:2 分类:技术文章

本文共 1388 字,大约阅读时间需要 4 分钟。

方法1:顺序遍历

list与vector不同,不支持随机访问和数组下标访问。

int start = 0, end = 2;//需要交换的两个元素位置CadEntities *p = CADSHAREDDATA->getCadEntities();    list
>::iterator iter1; list
>::iterator iter2; list
temp; int k = 0; for (list
>::iterator iter = p->_polylines.begin(); iter != p->_polylines.end(); ++iter, ++k) //遍历 { if (k == start) { iter1 = iter; } if (k == end) { iter2 = iter; } }//交换值 temp = *iter1; *iter1 = *iter2; *iter2 = temp;

 

方法2:借助迭代器函数

STL 中有用于操作迭代器的三个函数模板,它们是:

  • advance(p, n):使迭代器 p 向前或向后移动 n 个元素。
  • disce(p, q):计算两个迭代器之间的距离,即迭代器 p 经过多少次 + + 操作后和迭代器 q 相等。如果调用时 p 已经指向 q 的后面,则这个函数会陷入死循环。
  • iter_swap(p, q):用于交换两个迭代器 p、q 指向的值。
#include 
#include
#include
//要使用操作迭代器的函数模板,需要包含此文件using namespace std;int main(){ int a[5] = { 1, 2, 3, 4, 5 }; list
lst(a, a+5); list
::iterator p = lst.begin(); advance(p, 2); //p向后移动两个元素,指向3 cout << "1)" << *p << endl; //输出 1)3 advance(p, -1); //p向前移动一个元素,指向2 cout << "2)" << *p << endl; //输出 2)2 list
::iterator q = lst.end(); q--; //q 指向 5 cout << "3)" << distance(p, q) << endl; //输出 3)3 iter_swap(p, q); //交换 2 和 5 cout << "4)"; for (p = lst.begin(); p != lst.end(); ++p) cout << *p << " "; return 0;}

程序的输出结果是:

1) 3
2) 2
3) 3
4) 1 5 3 4 2

 

转载地址:https://libaineu2004.blog.csdn.net/article/details/106578123 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:好教程推荐系列:《代码重构和设计模式》《重学Java设计模式》
下一篇:C++开源游戏,EA部分开源红色警戒1

发表评论

最新留言

不错!
[***.144.177.141]2024年04月29日 04时36分39秒