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。

  • 相关阅读:
    <JSP> 入门
    <Html> 标签
    <MyBatis>入门八 工作原理
    <MyBatis>入门七 缓存机制
    <Zookeeper>入门 概念
    <SpringMvc>入门七 拦截器
    <SpringMvc>入门六 异常处理
    <Ajax> 入门
    <设计模式> 代理模式 Proxy Pattern
    <SpringMvc>入门五 文件上传
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1861835.html
Copyright © 2011-2022 走看看