首页 理论教育 STL搜索算法:例的使用效果

STL搜索算法:例的使用效果

时间:2023-10-25 理论教育 版权反馈
【摘要】:STL算法库提供了一系列搜索算法,用以获得第一个和给定值相同的元素的位置,同时也提供了条件搜索算法。上述搜索算法的使用见例4-6。图4-7 例4-7的执行效果第三组搜索算法的原型为:上述搜索算法都返回和[searchbegin,searchend]完全吻合的第一个子区间的第一个元素位置。图4-10 例4-10的执行效果第六组搜索算法使用adjacent_find()可实现搜寻序列中两个连续相等元素的功能。上述搜索算法既可以用于普通的C语言数组,也可以用于类似vector的容器,详见例4-11。

STL搜索算法:例的使用效果

STL算法库提供了一系列搜索算法,用以获得第一个和给定值相同的元素的位置,同时也提供了条件搜索算法。

第一组搜索算法(搜索第一个匹配元素)的原型为:

978-7-111-51399-5-Chapter04-21.jpg

第一种形式用于返回[begin,end]中第一个“元素值等于value”的元素的位置;第二种形式用于返回在[begin,end]中满足条件op(elem)的第一个元素。如果搜索失败,返回值为end。

上述搜索算法的使用见例4-6。

例4-6

978-7-111-51399-5-Chapter04-22.jpg

978-7-111-51399-5-Chapter04-23.jpg

例4-6执行效果如图4-6所示。

978-7-111-51399-5-Chapter04-24.jpg

图4-6 例4-6的执行效果

第二组搜索算法(搜索前n个连续匹配值)的原型为:

978-7-111-51399-5-Chapter04-25.jpg

第一种形式用以返回[begin,end]中的第一组满足条件“连续count个元素值全等于value”的元素的位置;第二种形式用以返回[begin,end]中第一组满足条件“op为‘真’”的“连续count个元素”的起始位置。如果搜索失败,返回值为end。上述搜索算法的使用方法见例4-7。

提示

关注例4-7中“greater<int>()”这个参数的使用形式,这也是类模板的使用方法之一。

例4-7

978-7-111-51399-5-Chapter04-26.jpg

978-7-111-51399-5-Chapter04-27.jpg

例4-7的执行效果如图4-7所示。

978-7-111-51399-5-Chapter04-28.jpg

图4-7 例4-7的执行效果

第三组搜索算法(搜索第一个子区间)的原型为:

978-7-111-51399-5-Chapter04-29.jpg

上述搜索算法都返回和[searchbegin,searchend]完全吻合的第一个子区间的第一个元素位置。第二种形式只有在op为“真”时才被执行。如果搜索失败,返回值均为end。这一组算法的使用方法比较简单,详见例4-8。请读者要仔细体会checkEven()函数的定义和调用过程。

提示

在调用搜索算法的过程中,checkEven()函数的两个参数分别从向量和数组checkEve-nArg中获得。checkEven()函数的第一个参数elem是向量myvector中的逐个元素,第二个参数even是从数组checkEvenArg中的元素,按顺序逐一带入。

例4-8

978-7-111-51399-5-Chapter04-30.jpg

978-7-111-51399-5-Chapter04-31.jpg

例4-8的执行效果如图4-8所示。

978-7-111-51399-5-Chapter04-32.jpg

图4-8 例4-8的执行效果(www.xing528.com)

第四组搜索算法(搜索最后一个子区间)的原型为:

978-7-111-51399-5-Chapter04-33.jpg

上述搜索算法都返回[begin,end]之中“和[searchbegin,searchend]完全吻合”的最后一个子区间内的第一个元素位置。其中,第二种形式只有在条件表达式op为“真”时才有意义。如果搜索失败,返回值为end。这两种算法的使用和前面的使用方法大相径庭,详见例4-9。

例4-9

978-7-111-51399-5-Chapter04-34.jpg

978-7-111-51399-5-Chapter04-35.jpg

例4-9的执行效果如图4-9所示。

978-7-111-51399-5-Chapter04-36.jpg

图4-9 例4-9的执行效果

第五组搜索算法(搜索某些元素的第一次出现位置)的原型为:

978-7-111-51399-5-Chapter04-37.jpg

上述搜索算法均返回“子串[searchbegin,searchend]”在[begin,end]中第一次出现的位置;第二种形式只有在满足条件表达式op为“真”时才有意义。

例4-9可以实现两个功能:在原容器(myvector)中搜索和目标容器(subvector)完全吻合的子向量第一次出现的位置;从后面反向搜索和目标容器(subvector)完全吻合的子向量第一次出现的位置。

提示

请读者关注vector<int>::reverse_iterator rpos这条语句。

例4-10

978-7-111-51399-5-Chapter04-38.jpg

978-7-111-51399-5-Chapter04-39.jpg

例4-10的执行效果如图4-10所示。

978-7-111-51399-5-Chapter04-40.jpg

图4-10 例4-10的执行效果

第六组搜索算法(搜索两个连续相等的元素)

使用adjacent_find()可实现搜寻序列中两个连续相等元素的功能。其原型为:

978-7-111-51399-5-Chapter04-41.jpg

第一种形式用于返回在[first,last]中第一对“连续相等两个元素”之中的第一元素位置;第二种形式用于返回[first,last]中第一对“连续两个元素均使二元判断式pr为true”的其中第一个元素的位置。第二种形式的本质还是有条件搜索,即搜索容器中符合条件pr的两个连续元素,并返回第一个元素的位置。

上述搜索算法既可以用于普通的C语言数组,也可以用于类似vector的容器,详见例4-11。

例4-11

978-7-111-51399-5-Chapter04-42.jpg

978-7-111-51399-5-Chapter04-43.jpg

例4-11的执行效果如图4-11所示。

978-7-111-51399-5-Chapter04-44.jpg

图4-11 例4-11的执行效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈