C++第12课 STL算法 (一)

1.查找算法

find: 区间查找

find_first_of: 查找区间第一次出现

adjacent_find: 查找第一次重复的数

search: 子序列查找

search_n: 子序列查找出现次数

count: 区间统计

count_if: 条件统计

equal: 比较

有序查找:

binary_search: 二分查找

upper_bound: 查找最后一个大于查找的值

lower_bound: 大于等于查找的值

equal_range: 区间比较,必须是有序序列

void testSearch()
{
    int array[10] = { 1,3,5,7,8,2,0,1,34,9 };
    vector<int> vec;
    vec.assign(array, array + 10);
    //1.基本查找
    auto result = find(vec.begin(), vec.end(), 1);
    if (result != vec.end()) {
        cout << *result << endl;
    }
    //2.条件查找
    auto findIf = find_if(vec.begin(), vec.end(), [](int vec) {
        return vec > 7;
        });
    if (findIf != vec.end()) {
        cout << *findIf << endl;
    }
    //3.范围查找    find_first_of
    int temp[] = { 9,5,1,3,2,4,6,8,0 };
    auto findRange = find_first_of(vec.begin(), vec.end(), temp, temp + 9);
    cout << *findRange << endl;
    //4.找第一次重复的元素
    vector<int> value = { 1,1,2,3,4,5,6,7,9,9 };
    cout << *adjacent_find(value.begin(), value.end()) << endl;
    //找子串
    int num[] = { 1,2,3 };
    cout << *search(value.begin(), value.end()-1, num, num + 3) << endl;
    //找指定出现次数的元素(重复出现的,连续的)
    //查找连续4个2的位置
    cout << *search_n(value.begin(), value.end(), 4, 2) << endl;
    //查找连续4个大于4个元素的的位置
    cout << *search_n(value.begin(), value.end(), 4, 4, [](int i, int j) {return i > j; }) << endl;
    //统计次数
    cout << count(value.begin(), value.end(), 2) << endl;
    //条件统计
    cout << count_if(value.begin(), value.end(), [](int i, int j = 3) {return i > j; }) << endl;
    //比较
    cout << equal(array, array + 10, vec.begin(), vec.end()) << endl;
    //二分查找  返回的是bool
    sort(vec.begin(), vec.end());
    cout << binary_search(vec.begin(), vec.end(), 4) << endl;
    //大于
    cout << *upper_bound(vec.begin(), vec.end(), 8) << endl;
    //小于等于
    cout << *lower_bound(vec.begin(), vec.end(), 8) << endl;
    //equal_range: 返回值是一个pair : first:等于 second:大于
    cout << *equal_range(vec.begin(), vec.end(), 8).first << endl;
    cout << *equal_range(vec.begin(), vec.end(), 8).second << endl;
}
原文地址:https://www.cnblogs.com/creature-lurk/p/15253129.html