zoukankan      html  css  js  c++  java
  • 如何刪除container中重複的element? (C/C++) (STL)

    Abstract
    STL並沒有提供這樣的algorithm,透過簡單的方法,就可以達成這個需求。

    Sample Code

     1/* 
     2(C) OOMusou 2007 http://oomusou.cnblogs.com
     3
     4Filename    : GenericAlgo_eliminate_duplicate.cpp
     5Compiler    : Visual C++ 8.0 / BCB 6.0 / gcc 3.4.2 / ISO C++
     6Description : Demo how to duplicated element in container
     7Release     : 05/27/2007 1.0
     8*/

     9#include <iostream>
    10#include <vector>
    11#include <algorithm>
    12
    13using namespace std;
    14
    15template<typename T>
    16inline void eliminate_duplicates(T& c) {
    17  sort(c.begin(), c.end());
    18  c.erase(unique(c.begin(), c.end()), c.end());  
    19}

    20
    21int main() {
    22  int ia[] = {11233};
    23  vector<int> ivec(ia, ia + sizeof(ia) / sizeof(int));
    24  
    25  eliminate_duplicates(ivec);
    26  copy(ivec.begin(), ivec.end(), ostream_iterator<int>(cout, " "));
    27}


    執行結果

    1 2 3 


    15行

    template<typename T>
    inline 
    void eliminate_duplicates(T& c) {
      sort(c.begin(), c.end());
      c.erase(unique(c.begin(), c.end()), c.end());  
    }


    由於要使用unique(),必須先經過sort()才有用,unique()會將重複的element放到container後面,並且將pointer指向重複的第一個element,erase()將從這個element,一直刪除到container最後,如此只會留下不重複的element。

  • 相关阅读:
    angular7新特性
    ES6基本语法入门
    uni-app 请求封装
    Node.js- Express框架
    webpack知识分享
    【JS】深入理解JS原型和继承
    JavaScript 变量作用域和声明提升
    在元素上写事件和addEventListent()的区别
    webStrom快捷键快速创建React组件
    vue移动端 实现手机左右滑动入场动画
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1861835.html
Copyright © 2011-2022 走看看