zoukankan      html  css  js  c++  java
  • STL: distance, unique

    看remove duplicates from sorted array,发现如果用STL的话可以一句话搞定,如下:

    class Solution {
        public:
            int removeDuplicates(int A[], int n) {
                return distance(A, unique(A, A + n));
            }
    };                

    去cplusplus.com上查了unique和distance的用法,如下:

    unique:

    equality (1)
    template <class ForwardIterator>
      ForwardIterator unique (ForwardIterator first, ForwardIterator last);
    
    predicate (2)
    template <class ForwardIterator, class BinaryPredicate>
      ForwardIterator unique (ForwardIterator first, ForwardIterator last,
                              BinaryPredicate pred);

    去除数组中存在连续的重复的元素,只保留第一个。方法返回an iterator to the element that follows the last element not removed(表达能力拙计,直接上英文原话吧)。

    也可以自定义predicate,相当于自己写remove的规则。

    一个例子如下:

    / unique algorithm example
    #include <iostream>     // std::cout
    #include <algorithm>    // std::unique, std::distance
    #include <vector>       // std::vector
    
    bool myfunction (int i, int j) {
      return (i==j);
    }
    
    int main () {
      int myints[] = {10,20,20,20,30,30,20,20,10};           // 10 20 20 20 30 30 20 20 10
      std::vector<int> myvector (myints,myints+9);
    
      // using default comparison:
      std::vector<int>::iterator it;
      it = std::unique (myvector.begin(), myvector.end());   // 10 20 30 20 10 ?  ?  ?  ?
                                                             //                ^
    
      myvector.resize( std::distance(myvector.begin(),it) ); // 10 20 30 20 10
    
      // using predicate comparison:
      std::unique (myvector.begin(), myvector.end(), myfunction);   // (no changes)
    
      // print out content:
      std::cout << "myvector contains:";
      for (it=myvector.begin(); it!=myvector.end(); ++it)
        std::cout << ' ' << *it;
      std::cout << '
    ';
    
      return 0;
    }

    distance:

    template<class InputIterator>
      typename iterator_traits<InputIterator>::difference_type
        distance (InputIterator first, InputIterator last);

    就是返回两个迭代器之间的距离。

    回到一开始leetcode的那个例子,因为unique返回的是the iterator to the element which follow the last element,所以一头一尾直接算出了去除重复元素之后的数组的长度。

  • 相关阅读:
    MongoDB 聚合函数及排序
    MongoDB 关系运算符及统计个数及跳过分页
    MongoDB 正则表达式查询
    MongoDB 范围查询
    MongoDB 逻辑运算符
    MongoDB数据库
    python 判断文件夹存在,不存在创建文件夹
    MySQL 数据库操作
    MySQL 数据库连接命令
    PyCharm Django 显示一个简单页面
  • 原文地址:https://www.cnblogs.com/parapax/p/3633541.html
Copyright © 2011-2022 走看看