C++标准模板库(STL) 学习记录 Part3

本文介绍C++ STL算法库中的多个实用函数,包括max、min、abs、swap、reverse、next_permutation、fill、sort、lower_bound、upper_bound等,并详细讲解pair的定义、用法及常见应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8. algorithm头文件下的常用函数

8.1 max()    min()    abs()   swap()

    abs(x)返回x的绝对值,但是x必须是整数,浮点型的绝对值请用math头文件下的fabs

    swap(x , y)用来交换x和y的值

8.2 reverse()

    reverse( it , it2 ) 可以将数组指针在 [ it , it2 )之间的元素或容器的迭代器在 [ it , it2 )范围内的元素进行逆转

        int a[10]={10,11,12,13,14,15};
	reverse(a,a+4);

如果是对容器内的元素(例如string字符串)进行反转,结果也是一样

        string str = "abcdefghi";
	reverse(str.begin()+2,str.begin()+6);

8.3 next_permutation()

给出一个序列在全排列中的下一个序列

    输出n=3的全排列,123 132 213 231 312 321
    int p[10]={1,2,3};
    	do{
		cout<<p[0]<<p[1]<<p[2]<<endl;
	}while(next_permutation(p,p+3));

由于next_permutation在已经到达全排列的最后一个时才会返回false,这样方便退出循环,而使用do while语句而不使用while是因为123本身也要输出,如果使用while会直接跳到下一个序列输出

8.4 fill()

fill()可以把数组或容器中的某一段区间赋为某个相同的值,和memset不同,这里的赋值可以使数组类型对应范围中的任意值

        int f[5]={1,2,3,4,5};
	fill(f,f+5,23333);

8.5 sort() 

8.6 lower_bound()    upper_bound()

    这两个函数需要用在一个有序数组或容器内

    lower_bound( first , last , val )用来寻找在顺组或容器的 [ first , last ) 前闭后开区间范围内第一个值大于等于val的元素的位置,如果是数组,则返回该位置的指针,如果是容器,则返回该位置的迭代器

    upper_bound( first , last , val )用来寻找在顺组或容器的 [ first , last ) 前闭后开区间范围内第一个值大于val的元素的位置,如果是数组,则返回该位置的指针,如果是容器,则返回该位置的迭代器

    如果数组或容器中没有需要寻找的元素,则均返回可以插入该元素的位置的指针或迭代器,复杂度均为O(log(last-first))

    如果只是想获得欲查元素的下标,就可以不使用临时指针,而直接令返回值减去数组首地址

    


9. pair的常见用法

9.1 pair的定义

pair可以看作一个内部有两个元素的结构体,且这两个元素的类型是可以指定的,使用pair,要添加#include<utility>

由于map的内部实现中涉及pair,因此添加map头文件时会自动添加utility头文件

pair有两个参数,分别对应first和second的数据类型,它们可以是任意基本数据类型或容器

pair<typeName1 , typeName2> name;

	pair<string,int> p1;
	pair<string,int> p2("haha",5); //定义时初始化

如果想要在代码中临时构建一个pair

        pair<string,int>("haha",5);
	make_pair("haha",5);//使用自带的make_pair函数

9.2 pair中元素的访问

        pair<string,int> p;
	p.first="haha";
	p.second=5;
	cout<<p.first<<" "<<p.second<<endl;
	p = make_pair("xixi",55);
	cout<<p.first<<" "<<p.second<<endl;
	p = pair<string,int>("heihei",555);
	cout<<p.first<<" "<<p.second<<endl;

9.3 pair常用函数实例

    比较操作数:比较规则是先以first的大小作为标准,只有当first相等时才去判断second的大小

9.4 pair的常见用途

(1)用来代替二元结构体及其构造函数,节省编码时间

(2)作为map的键值对来进行插入

    map<string,int> mp;
	mp.insert(make_pair("heihei",5));
	mp.insert(pair<string,int>("haha",10));
	for(map<string,int>::iterator it = mp.begin();it!=mp.end();it++){
		cout<<it->first<<" "<<it->second<<endl;
	}



内容概要:本文系统介绍了基于C#(VS2022+.NET Core)与HALCON 24.11的工业视觉测量拟合技术,涵盖边缘提取、几何拟合、精度优化及工业部署全流程。文中详细解析了亚像素边缘提取、Tukey抗噪算法、SVD平面拟合等核心技术,并提供了汽车零件孔径测量、PCB焊点共面性检测等典型应用场景的完整代码示例。通过GPU加速、EtherCAT同步等优化策略,实现了±0.01mm级测量精度,满足ISO 1101标准。此外,文章还探讨了深度学习、量子启发式算法等前沿技术的应用前景。 适合人群:具备一定编程基础,尤其是熟悉C#和HALCON的工程师或研究人员,以及从事工业视觉测量与自动化检测领域的技术人员。 使用场景及目标:①学习如何使用C#和HALCON实现高精度工业视觉测量系统的开发;②掌握边缘提取、抗差拟合、3D点云处理等核心技术的具体实现方法;③了解工业部署中的关键技术,如GPU加速、EtherCAT同步控制、实时数据看板等;④探索基于深度学习和量子计算的前沿技术在工业视觉中的应用。 其他说明:本文不仅提供了详细的理论分析和技术实现,还附有完整的代码示例和实验数据,帮助读者更好地理解和实践。同时,文中提到的硬件选型、校准方法、精度验证等内容,为实际项目实施提供了重要参考。文章最后还给出了未来的技术演进方向和开发者行动建议,如量子-经典混合计算、自监督学习等,以及参与HALCON官方认证和开源社区的建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪突猛进!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值