zoukankan      html  css  js  c++  java
  • STL Algorithm 算法

    1.equal_range

    template <class ForwardIterator, class T>
        pair <ForwardIterator, ForwardIterator>
            equal_range(ForwardIterator first, ForwardIterator last, const T& val);

    用法:有序数组二分查找

    int a[]={1,2,3,4,1,5};
    vector<int> vec(a, a+6);
    pair< vector<int>::iterator, vector<int>::iterator > iter;
    iter = equal_range(vec.begin, vec.end(), 1);
    // iter = vec.equal_range(1);

    iter.first是指向所查找元素的第一次出现的位置的迭代器,指向所查找元素最后一次出现位置的后一个位置的迭代器。

     2.unique

    template <class ForwardIterator>
        ForwardIterator unique (ForwardIterator first, ForwardIterator last);

    去除相邻的重复元素(重复的只保留一个,多余的移到数列末尾,并没有删除),返回一个指向无重复元素的下一个的迭代器。(使用前一般会使序列有序)

    //去除重复的元素
    sort( vec.begin(), vec.end() );
    vec.erase(unique(vec.begin(), vec.end()), vec.end());

     3.sort:只能对序列式容器排序

    template <class RandomAccessIterator, class Compare>
        void sort(RandomAccessIterator first, RandomAccessIterator last, Compare);

    对整个序列进行划分,短的序列快排,长的序列继续递归划分,在递归过深的情况下堆排,序列过短采用插排。

    bool myfunction(int i, int j){return (i < j);};
    struct myclass{
        bool operator()(int i, int j ){ return (i < j );};
    } myobject;
    
    int a[]={1,3,2,5,4};
    vector<int> vec(a, a + 8);
    sort(vec.begin(), vec.end());
    //sort(vec.begin(), vec.end(), myfunction);
    //sort(vec.begin(), vec.end(), myobject);

     4.reverse

    //BidirectionalIterator双向迭代器
    template<class BidirectionalIterator>
        void reverse(BidirectionalIterator first, BidirectionalIterator last);

    将元素翻转,实际上操作是:iter_swap(first, last);

    5.transform

    template <class InputIterator, class OutputIterator, class UnaryOperation>
      OutputIterator transform (InputIterator first1, InputIterator last1,
                                OutputIterator result, UnaryOperation op);

    对 first1 和 last1 之间的元素进行 op 操作,并返回结果的 result 迭代器。

    in op_increase(int i){return ++i};
    vector<int> vec;
    for(int i = 0; i < 10; ++i)
    {    vec.push_back(10 * i); }
    transform(vec.begin(), vec.end(), vec.begin(), op_increase);
    //vec:1、11、21、31、41...
  • 相关阅读:
    WinSCP 与 Putty 中文显示乱码解决方法
    centos 6.2上oracle 11g的远程安装
    CentOs 6.3_64静默安装oracle11g_r2
    IP地址修改后ORACLE不能使用问题
    linux查看本机IP、gateway、dns
    linux启动SSH及开机自动启动
    linux下如何从自动获取ip转到手动配置ip
    Linux系统(CentOS 6.4)的NTFS驱动NTFS3g的安装和配置
    正则表达式——去除文本中的非汉字(VB2005)
    遍历排列的实现——VB2005
  • 原文地址:https://www.cnblogs.com/wukuaiqian/p/7732391.html
Copyright © 2011-2022 走看看