• 模板函数实现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;
    }

    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    coredump分析
    Sword LRU算法
    C++ STL迭代器失效问题
    Sword DB主从一致性的解决方法
    Sword CRC算法原理
    C语言 按位异或实现加法
    Linux 等待信号(sigsuspend)
    C语言 宏定义之可变参数
    Linux shell字符串操作
    C++ *和&
  • 原文地址:https://www.cnblogs.com/kuaixue/p/14133803.html
Copyright © 2020-2023  润新知