非修改性序列操作(12个)

循环

对序列中的每个元素执行某操作 for_each()

查找

在序列中找出某个值的第一次出现的位置 find()
在序列中找出符合某谓词的第一个元素 find_if()
在序列中找出一子序列的最后一次出现的位置 find_end()
在序列中找出第一次出现指定值集中之值的位置 find_first_of()
在序列中找出相邻的一对值 adjacent_find()

计数

在序列中统计某个值出现的次数 count()
在序列中统计与某谓词匹配的次数 count_if()

比较

找出两个序列相异的第一个元素 mismatch()
两个序列中的对应元素都相同时为真 equal()

搜索

在序列中找出一子序列的第一次出现的位置 search()
在序列中找出一值的连续n次出现的位置 search_n()

修改性序列操作(27个)

复制

从序列的第一个元素起进行复制 copy()
从序列的最后一个元素起进行复制 copy_backward()

交换

交换两个元素 swap()
交换指定范围的元素 swap_ranges()
交换由迭代器所指的两个元素 iter_swap()

变换

将某操作应用于指定范围的每个元素 transform()

替换

用一个给定值替换一些值 replace()
替换满足谓词的一些元素 replace_if()
复制序列时用一给定值替换元素 replace_copy()
复制序列时替换满足谓词的元素 replace_copy_if()

填充

用一给定值取代所有元素 fill()
用一给定值取代前n个元素 fill_n()

生成

用一操作的结果取代所有元素 generate()
用一操作的结果取代前n个元素 generate_n()

删除

删除具有给定值的元素 remove()
删除满足谓词的元素 remove_if()
复制序列时删除具有给定值的元素 remove_copy()
复制序列时删除满足谓词的元素 remove_copy_if()

唯一

删除相邻的重复元素 unique()
复制序列时删除相邻的重复元素 unique_copy()

反转

反转元素的次序 reverse()
复制序列时反转元素的次序 reverse_copy()

环移

循环移动元素 rotate()
复制序列时循环移动元素 rotate_copy()

随机

采用均匀分布来随机移动元素 random_shuffle()

划分

将满足某谓词的元素都放到前面 partition()
将满足某谓词的元素都放到前面并维持原顺序 stable_partition()

序列排序及相关操作(27个)

排序

以很好的平均效率排序 sort()
排序,并维持相同元素的原有顺序 stable_sort()
将序列的前一部分排好序 partial_sort()
复制的同时将序列的前一部分排好序 partial_sort_copy()

第n个元素

将第n各元素放到它的正确位置 nth_element()

二分检索

找到大于等于某值的第一次出现 lower_bound()
找到大于某值的第一次出现 upper_bound()
找到(在不破坏顺序的前提下)可插入给定值的最大范围 equal_range()
在有序序列中确定给定元素是否存在 binary_search()

归并

归并两个有序序列 merge()
归并两个接续的有序序列 inplace_merge()

有序结构上的集合操作

一序列为另一序列的子序列时为真 includes()
构造两个集合的有序并集 set_union()
构造两个集合的有序交集 set_intersection()
构造两个集合的有序差集 set_difference()
构造两个集合的有序对称差集(并-交) set_symmetric_difference()

堆操作

向堆中加入元素 push_heap()
从堆中弹出元素 pop_heap()
从序列构造堆 make_heap()
给堆排序 sort_heap()

最大和最小

两个值中较小的 min()
两个值中较大的 max()
序列中的最小元素 min_element()
序列中的最大元素 max_element()

词典比较

两个序列按字典序的第一个在前 lexicographical_compare()

排列生成器

按字典序的下一个排列 next_permutation()
按字典序的前一个排列 prev_permutation()

函数对象类模板

函数对象类模板 成员函数 T operator ( const T & x, const T & y) 的功能
plus return x + y;
minus < > return x - y;
multiplies return x * y;
divides return x / y;
modulus return x % y;
成员函数 bool operator( const T & x, const T & y) 的功能
equal_to return x == y;
not_equal_to return x! = y;
greater return x > y;
less return x < y;
greater_equal return x > = y;
less_equal return x <= y;
logical_and return x && y;
logical_or return x || y;
成员函数 T operator( const T & x) 的功能
negate return - x;
成员函数 bool operator( const T & x) 的功能
logical_not return ! x;

拓展

二分查找

template<class InputIterator, class T>
InputIterator bfind(InputIterator first, InputIterator end, const T& key)
{
    InputIterator l = first;
    InputIterator r = end-1;
    InputIterator mid;
    while(l <= r)
    {
        mid = l + distance(l, r)/2;
        if(*mid > key)
            r = mid - 1;
        else if(key  > *mid )
            l = mid + 1;
        else 
            return mid;
    }
    return end;
}

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(int argc, char* argv[])
{
	vector<int> ivec { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
			17, 18, 19, 20 };

	vector<int>::iterator iter = bfind(ivec.begin(), ivec.end(), 4);
	if (iter != ivec.end())
		cout << *iter << endl;
	else
		cout << "not find" << endl;
    return 0;
}