这里对STL中常用的算法进行总结,会不断更新!
- unique:
去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序。
它并没有将重复的元素删除,而是把重复的元素放到数组的最后面。
对于长度为n数组a,unique(a,a+n) - a返回的是去重后的数组长度。(头文件algorithm)
- unique_copy:
类似于unique,唯一的区别在于unique_copy接受第三个迭代器实参,用于指定复制不重复元素的目标序列。
3. accumulate:
累加初始值和输入范围内所有元素的值,返回类型就是其第三个实参的类型。调用该函数时必需传递一个初始值,否则,accumulate将不知道使用什么初始值。其次,容器内的元素类型必须与第三个实参的类型匹配,或者可转换为第三个实参的类型。(头文件numeric)
4. find
在一个区间中查找第一个等于查找值的元素。
5.
search
在一个序列中搜索与另一序列匹配的子序列。它有如下两个原型,在迭代器区间[first1, last1)上找迭代器区间[first2, last2)完全匹配(或者满足二元谓词binary_pred)子序列,返回子序列的首个元素在[first1, last1)区间的迭代器值,或返回last1表示没有匹配的子序列。
6. search_n
搜索序列中是否有一系列元素值均为某个给定值的子序列。
分别在迭代器区间[first, last)上搜索是否有count个连续元素,其值均等于value(或者满足谓词判断binary_pred的条件),返回子序列首元素的迭代器,或last以表示没有重复元素的子序列。
7.
find_end
在一个序列中搜索出最后一个与另一序列匹配的子序列。
8.
find_first_of
用于查找位于某个范围之内的元素。在
区间[first1, last1)上查找元素*i,使得迭代器区间[first2, last2)有某个元素*j,满足*i ==*j或满足二元谓词函数comp(*i, *j)==true的条件。元素找到则返回迭代器i,否则返回last1。
9. copy
将一个区间的元素移至另一个区间(只给出起始位置)。
10. remove
将一个区间中所有值为特定值得元素移除,返回移除元素后新的结束位置。
查找第一个和指定值相当的元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素,也就是说,所有和value相同值的元素都会被覆盖,而其他的元素都会依次前移。remove并不真正删除元素,调remove后,容器中元素数目不会变化。remove使不用被删除的元素移动到容器的前端,但并不保证删除的元素移动到容器的后端。如果需要真正删除容器元素,需要结合erase-remove用法。这里,如果容器中保存的是指针,调用remove,erase组合进行删除需要特别注意。所以最好用智能指针。
需要拍下区间的STL算法:
binary_search,lower_bound,upper_bound,equal_range,set_union,set_intersection,set_difference,set_symmetric_difference,includes