zoukankan      html  css  js  c++  java
  • 模板函数实现vector元素去重

    在实际工作中,经常遇到数组元素去重的需求,往往是根据一定的规则去除符合的元素,我通过函数模板实现了一个简单的容器去重功能,记录下来,分享给大家!需要注意的是模板函数使用到了“==”运算符,因此,对于容器的元素类型,需要实现重载“==”运算符,切记!

    template <typename T>//先声明模板参数 T
    void RemoveSameElement(vector<T>& objs)
    {
        vector<int> indexs;
        for (size_t i = 0; i < objs.size(); ++i)
        {
            for (size_t j = i + 1; j < objs.size(); ++j)
            {
                if (objs[i] == objs[j])
                {
                    indexs.push_back(i);//记录i的索引
                    break;
                }
            }
        }
    
        //从后往前批量删除重复数据
        for (vector<int>::reverse_iterator iter = indexs.rbegin(); iter != indexs.rend(); ++iter)
        {
            objs.erase(objs.begin() + *iter);
        }
    }

    调用示例:

    int _tmain(int argc, _TCHAR* argv[])
    {
        vector<int> v;
    
        v.push_back(8);
        v.push_back(1);
        v.push_back(4);
        v.push_back(2);
        v.push_back(3);
        v.push_back(4);
        v.push_back(5);
        v.push_back(4);
        v.push_back(3);
        v.push_back(1);
        v.push_back(4);
        v.push_back(6);
        v.push_back(8);
        cout << "输入:" << endl;
        for (size_t i = 0 ; i < v.size(); ++i)
        {
            cout << v[i] << " ";
        }
        cout << endl << "排序:"<< endl;
        sort(v.begin(), v.end());
        for (size_t i = 0 ; i < v.size(); ++i)
        {
            cout << v[i] << " ";
        }
        cout << endl;
    
        RemoveSameElement(v);
        cout << "去重:" << endl;
        sort(v.begin(), v.end());
        for (size_t i = 0 ; i < v.size(); ++i)
        {
            cout << v[i] << " ";
        }
    
        cout << endl;
        return 0;
    }

    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    echart自定义浮窗 增加点击事件
    原生js学习 选择dom
    GOjs版本2.0去除水印
    js 作用域
    javaScript的原型模式
    JavaScript的基本包装类型说明
    原生js 函数 callee属性
    Vue学习-基本指令
    js函数
    Kubernetes(一):云计算发展历程
  • 原文地址:https://www.cnblogs.com/kuaixue/p/14133803.html
Copyright © 2011-2022 走看看