STL中常用算法的算法原型整理如下
1. //查找重复元素 2. _NODISCARD _FwdIt adjacent_find(const _FwdIt _First, _FwdIt _Last, _Pr _Pred); 3. _NODISCARD _FwdIt adjacent_find(const _FwdIt _First, const _FwdIt _Last); 4. //二分查找(有序数列) 5. _NODISCARD bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val, _Pr _Pred); 6. _NODISCARD bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val); 7. //计数 8. _NODISCARD _Iter_diff_t<_InIt> count(const _InIt _First, const _InIt _Last, const _Ty& _Val); 9. //计数(符合条件元素个数) 10. _NODISCARD _Iter_diff_t<_InIt> count_if(_InIt _First, _InIt _Last, _Pr _Pred); 11. //查找等于_Val的元素 12. _NODISCARD _InIt find(_InIt _First, const _InIt _Last, const _Ty& _Val); 13. //根据条件查找 14. _NODISCARD _InIt find_if(_InIt _First, const _InIt _Last, _Pr _Pred); 15. //合并两个有序序列 16. _DestTy* merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _DestTy (&_Dest)[_DestSize], _Pr _Pred); 17. _OutIt merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred); 18. _DestTy* merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _DestTy (&_Dest)[_DestSize]); 19. _OutIt merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest); 20. //排序 21. void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred); 22. void sort(const _RanIt _First, const _RanIt _Last); 23. //随机排序 24. void random_shuffle(_RanIt _First, _RanIt _Last, _RngFn&& _RngFunc); 25. void random_shuffle(_RanIt _First, _RanIt _Last); 26. //倒序 27. void reverse(const _BidIt _First, const _BidIt _Last); 28. //复制 29. _DestTy* copy(_InIt _First, _InIt _Last, _DestTy (&_Dest)[_DestSize]); 30. _OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest); 31. //替换 32. void replace(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval); 33. //按条件替换 34. void replace_if(const _FwdIt _First, const _FwdIt _Last, _Pr _Pred, const _Ty& _Val); 35. //交换 36. void swap(tuple<_Types...>& _Left, tuple<_Types...>& _Right); 37. void swap(basic_string<_Elem, _Traits, _Alloc>& _Left, basic_string<_Elem, _Traits, _Alloc>& _Right); 38. void swap(function<_Fty>& _Left, function<_Fty>& _Right); 39. void swap(_Ty (&_Left)[_Size], _Ty (&_Right)[_Size]); 40. void swap(_Ty& _Left, _Ty& _Right); 41. void swap(weak_ptr<_Ty>& _Left, weak_ptr<_Ty>& _Right); 42. void swap(shared_ptr<_Ty>& _Left, shared_ptr<_Ty>& _Right); 43. void swap(pair<_Ty1, _Ty2>& _Left, pair<_Ty1, _Ty2>& _Right); 44. //填充 45. void fill(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Val); 46. //集合并集 47. _DestTy* set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _DestTy (&_Dest)[_DestSize], _Pr _Pred); 48. _DestTy* set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _DestTy (&_Dest)[_DestSize]); 49. _OutIt set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred); 50. _OutIt set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest); 51. //交集 52. _DestTy* set_intersection(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _DestTy (&_Dest)[_DestSize], _Pr _Pred); 53. _DestTy* set_intersection(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _DestTy (&_Dest)[_DestSize]); 54. _OutIt set_intersection(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred); 55. _OutIt set_intersection(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest); 56. //差集 57. _DestTy* set_difference(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _DestTy (&_Dest)[_DestSize], _Pr _Pred); 58. _DestTy* set_difference(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _DestTy (&_Dest)[_DestSize]); 59. _OutIt set_difference(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred); 60. _OutIt set_difference(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest); 61. //遍历 62. _Fn for_each(_InIt _First, _InIt _Last, _Fn _Func); 63. //遍历并修改 64. _DestTy* transform(const _InIt _First, const _InIt _Last, _DestTy (&_Dest)[_DestSize], _Fn _Func); 65. _OutIt transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func); 66. _DestTy* transform(const _InIt1 _First1, const _InIt1 _Last1, _InIt2 _First2, _DestTy (&_Dest)[_DestSize], _Fn _Func); 67. _OutIt transform(const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2, _OutIt _Dest, _Fn _Func); 68. _DestTy* transform(const _InIt1 _First1, const _InIt1 _Last1, _RightTy (&_First2)[_RightSize], _DestTy (&_Dest)[_DestSize], _Fn _Func); 69. _OutIt transform(const _InIt1 _First1, const _InIt1 _Last1, _RightTy (&_First2)[_RightSize], const _OutIt _Dest, _Fn _Func);