C++ Primer 学习笔记(6): 泛型算法

本文介绍了泛型算法的基本概念及使用方法,并详细探讨了列表(list)的各种实用操作,如排序、合并、删除等。此外,还介绍了函数对象的概念及其在泛型算法中的应用。

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

1 泛型算法

所有泛型算法的前两个实参都是一对iterator, 通常被称为first 和 last, 他们标记出要操作的容器或内置数组中的元素范围。

[first, last)

表示从first开始,到last结束,但不包括last。当first==last时范围为空。


1.1 排序和通用整序算法

      14个排序和通用整序算法为容器中元素的排序提供了各种策略。分割算法把容器分为两组。第一组由满足某个条件的元素组成,第二组则由不满足条件的元素组成。

      inplace_merge(), merge(), nth_element(), partial_sort(), partial_sort_copy(), partition(), random_shuffle(), reverse(), reverse_copy(), rotate(), rotate_copy(), sort(), stable_sort(), stable_partition()

1.2 list

(1)list::merge()

根据底层元素类型的小于操作符或用户指定的比较操作,合并两个已排序的list的元素。

在应用merge()操作以后,list2是空的,list1含有升序排列的15个元素


(2)list::remove()


(3) list::remove_if()

remove_if()操作删除所有满足指定条件为真的元素。例如:



(4) list::reverse()

reverse()操作反向排列list元素


(5)list::sort()


缺省情况下,sort()操作以底层元素类型的小于操作符以升序放置list元素。也可以将一个替换的比较操作符指定为实参。例如:


2 函数对象

函数指针的一种替代策略是Function object(函数对象)。

函数对象与函数指针相比较有两个方面的优点:首先如果被重载的调用操作符是inline函数则编译器能够执行内联编译,提供可能的性能好处;其次函数对象可以拥有任意数目的额外数据,用这些数据可以缓冲结果,也可以缓冲有助于当前操作的数据。

函数对象是一个类,它重载了函数调用操作符operator() ,该操作符封装了一个函数的功能。典型情况下函数对象被作为实参传递给泛型算法,当然我们也可以定义独立的函数对象实例。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值