zoukankan      html  css  js  c++  java
  • vector 搜索

    http://classfoo.com/ccby/article/cIBahI

    #include <iostream>
    #include <algorithm>
    #include <functional>
    #include <vector>
    // 用在此处是为了方便简洁, 在实际编程中慎用
    using namespace std;
    void main()
    {
        int iarray[] = { 0, 1, 2, 3, 4, 5, 6, 6, 6, 7, 8 };
        vector<int> foo1(iarray, iarray + sizeof(iarray) / sizeof(int));
        int iarray1[] = { 6, 6 };
        vector<int> foo2(iarray1, iarray1 + sizeof(iarray1) / sizeof(int));
        int iarray2[] = { 5, 6 };
        vector<int> foo3(iarray2, iarray2 + sizeof(iarray2) / sizeof(int));
        int iarray3[] = { 0, 1, 2, 3, 4, 5, 7, 7, 7, 9, 7 };
        vector<int> foo4(iarray3, iarray3 + sizeof(iarray3) / sizeof(int));
    
        //找出foo1之中相邻元素值相等的第一个元素
        cout << *adjacent_find(foo1.begin(), foo1.end()) << endl; //6
    
        //找出foo1之中元素值为6的元素个数
        cout << count(foo1.begin(), foo1.end(), 6) << endl; //3
    
        //找出foo1之中小于7的元素个数
        cout << count_if(foo1.begin(), foo1.end(), bind2nd(less<int>(), 7)) << endl;//9
    
        //找出foo1之中元素值为4的第一个元素所在位置的元素
        cout << *find(foo1.begin(), foo1.end(), 4) << endl;//4
    
        //找出foo1之中大于2的第一个元素所在位置的元素
        cout << *find_if(foo1.begin(), foo1.end(), bind2nd(greater<int>(), 2))//3
            << endl;
    
        //找出foo1之中子序列foo2所出现的最后一个位置,再往后3个位置的元素
        cout << *(find_end(foo1.begin(), foo1.end(), foo2.begin(),//8
            foo2.end()) + 3) << endl;
    
        //找出foo1之中子序列foo2所出现的第一个位置,再往后3个位置的元素
        cout << *(find_first_of(foo1.begin(), foo1.end(), foo2.begin(),//7
            foo2.end()) + 3) << endl;
    
        //子序列foo3在foo1中出现的起点位置元素
        cout << *search(foo1.begin(), foo1.end(), foo3.begin(), foo3.end())//5
            << endl;
    
        //查找连续出现3个6的起点位置元素
        cout << *search_n(foo1.begin(), foo1.end(), 3, 6, equal_to<int>()) << endl;//6
    
        //判断两个区间foo1和foo4相等否(0为假,1为真)
        cout << equal(foo1.begin(), foo1.end(), foo4.begin()) << endl;//0
    
        //查找区间foo4在foo1中不匹配点的位置
        pair<std::vector<int>::iterator, std::vector<int>::iterator>result =
            mismatch(foo1.begin(), foo1.end(), foo4.begin());
        cout << result.first - foo1.begin() << endl;//6
    }
  • 相关阅读:
    Java中符号位扩展
    BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机)
    BZOJ1030: [JSOI2007]文本生成器(AC自动机)
    BZOJ2434: [Noi2011]阿狸的打字机(AC自动机 树状数组)
    BZOJ1432: [ZJOI2009]Function(找规律)
    BZOJ2659: [Beijing wc2012]算不出的算式(数学)
    洛谷P3796 【模板】AC自动机(加强版)
    洛谷P3966 [TJOI2013]单词(AC自动机)
    BZOJ2580: [Usaco2012 Jan]Video Game(AC自动机)
    后缀自动机经典操作
  • 原文地址:https://www.cnblogs.com/yuguangyuan/p/5845263.html
Copyright © 2011-2022 走看看