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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月29日 04时36分39秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ROS相关知识
2019-04-30
单目深度估计 monodepth2模型 代码
2019-04-30
位图索引Bitmap indexes
2019-04-30
YOLO算法(二)—— Yolov2 & yolo9000
2019-04-30
YOLO算法(三)—— Yolov3 & Yolo系列网络优缺点
2019-04-30
Python的__future__模块
2019-04-30
计算机视觉中的cost-volume的概念具体指什么(代价体积)
2019-04-30
启发函数heuristic 与 A*
2019-04-30
Image Pyramid(图像金字塔)
2019-04-30
Oracle 作业记录
2019-04-30
putty连接AWS配置(multimedia project)
2019-04-30
Hourglass Network 沙漏网络 (pose estimation姿态估计)
2019-04-30
OpenCV实战(二)——答题卡识别判卷
2019-04-30
目标检测神经网络的发展历程(52 个目标检测模型)
2019-04-30
Boundary loss 损失函数
2019-04-30