STL算法库提供了一系列搜索算法,用以获得第一个和给定值相同的元素的位置,同时也提供了条件搜索算法。
第一组搜索算法(搜索第一个匹配元素)的原型为:
第一种形式用于返回[begin,end]中第一个“元素值等于value”的元素的位置;第二种形式用于返回在[begin,end]中满足条件op(elem)的第一个元素。如果搜索失败,返回值为end。
上述搜索算法的使用见例4-6。
例4-6
例4-6执行效果如图4-6所示。
图4-6 例4-6的执行效果
第二组搜索算法(搜索前n个连续匹配值)的原型为:
第一种形式用以返回[begin,end]中的第一组满足条件“连续count个元素值全等于value”的元素的位置;第二种形式用以返回[begin,end]中第一组满足条件“op为‘真’”的“连续count个元素”的起始位置。如果搜索失败,返回值为end。上述搜索算法的使用方法见例4-7。
提示
关注例4-7中“greater<int>()”这个参数的使用形式,这也是类模板的使用方法之一。
例4-7
例4-7的执行效果如图4-7所示。
图4-7 例4-7的执行效果
第三组搜索算法(搜索第一个子区间)的原型为:
上述搜索算法都返回和[searchbegin,searchend]完全吻合的第一个子区间的第一个元素位置。第二种形式只有在op为“真”时才被执行。如果搜索失败,返回值均为end。这一组算法的使用方法比较简单,详见例4-8。请读者要仔细体会checkEven()函数的定义和调用过程。
提示
在调用搜索算法的过程中,checkEven()函数的两个参数分别从向量和数组checkEve-nArg中获得。checkEven()函数的第一个参数elem是向量myvector中的逐个元素,第二个参数even是从数组checkEvenArg中的元素,按顺序逐一带入。
例4-8
例4-8的执行效果如图4-8所示。
图4-8 例4-8的执行效果(www.xing528.com)
第四组搜索算法(搜索最后一个子区间)的原型为:
上述搜索算法都返回[begin,end]之中“和[searchbegin,searchend]完全吻合”的最后一个子区间内的第一个元素位置。其中,第二种形式只有在条件表达式op为“真”时才有意义。如果搜索失败,返回值为end。这两种算法的使用和前面的使用方法大相径庭,详见例4-9。
例4-9
例4-9的执行效果如图4-9所示。
图4-9 例4-9的执行效果
第五组搜索算法(搜索某些元素的第一次出现位置)的原型为:
上述搜索算法均返回“子串[searchbegin,searchend]”在[begin,end]中第一次出现的位置;第二种形式只有在满足条件表达式op为“真”时才有意义。
例4-9可以实现两个功能:在原容器(myvector)中搜索和目标容器(subvector)完全吻合的子向量第一次出现的位置;从后面反向搜索和目标容器(subvector)完全吻合的子向量第一次出现的位置。
提示
请读者关注vector<int>::reverse_iterator rpos这条语句。
例4-10
例4-10的执行效果如图4-10所示。
图4-10 例4-10的执行效果
第六组搜索算法(搜索两个连续相等的元素)
使用adjacent_find()可实现搜寻序列中两个连续相等元素的功能。其原型为:
第一种形式用于返回在[first,last]中第一对“连续相等两个元素”之中的第一元素位置;第二种形式用于返回[first,last]中第一对“连续两个元素均使二元判断式pr为true”的其中第一个元素的位置。第二种形式的本质还是有条件搜索,即搜索容器中符合条件pr的两个连续元素,并返回第一个元素的位置。
上述搜索算法既可以用于普通的C语言数组,也可以用于类似vector的容器,详见例4-11。
例4-11
例4-11的执行效果如图4-11所示。
图4-11 例4-11的执行效果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。