非变易算法是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。作为算法函数参数的迭代器,一般为Input Iterator输入迭代器,具有“++”迭代和“*”访问操作。通过迭代器的元素遍历,可对迭代器区间所界定的元素进行操作。因此,非变易算法具有极为广泛的适用性,基本上可应用于各种容器。
一、逐个容器元素for_each
#include <stl_algo.h>
template <class InputIter, class Function>
Function for_each(InputIter first, InputIter last, Function f) {
for (; first != last; ++first) //
f(*first);
return f;
}
二、查找容器元素find
template <class InputIter, class T>
inline InputIter find(InputIter first, InputIter last, const T& val, input_iterator_tag) {
while (first != last && !(*first == val))
++first;
return first;
}
三、条件查找容器元素find_if
四、邻近查找容器元素adjacent_find
五、范围查找容器元素find_first_of
六、统计等于某值的容器元素个数count
七、条件统计容器元素个数count_if
八、元素不匹配查找mismatch
九、元素相等判断equal
十、子序列搜索search
search算法函数在一个序列中搜索与另一序列匹配的子序列。
十一、重复元素子序列搜索search_n
十二、最后一个子序列搜索find_end