如何去除一个数组中的重复元素?

可能在实际开发中,会遇到这样的一个问题:有一组元素构成的数组,里面存在重复的元素,现在要去除其中重复的元素,即重复的元素只保留一个,如何做到?

一个直接的想法是:用一个数组存放结果,对每个元素,检查其在结果数组中是否存在,如果不存在则放入,如果存在则忽略。由于不确定结果数组的大小,用STL vector存放比较方便。在STL中有个set,即集合。用上它,就能较好地解决这个问题。

#include <iostream>
#include <vector>
#include <set>

using namespace std;

// Removes duplicate elements in a given vector.
template<typename _Tp>
inline vector<_Tp> remove_dups(const vector<_Tp>& src) {
	typedef typename set<_Tp>::const_iterator constSetIterator;
	typedef typename vector<_Tp>::const_iterator constVecIterator;
	set<_Tp> set_elems;
	for (constVecIterator it = src.begin(); it != src.end(); ++it)
		set_elems.insert(*it);
	vector<_Tp> elems;
	for (constSetIterator it = set_elems.begin(); it != set_elems.end(); ++it)
		elems.push_back(*it);
	return elems;
}

int main()
{
	// give an array of elements with repeated ones
	vector<int> src{ 1, 2, 2, 3, 5, 4, 3, 2, 1, 2, 6, 4, 3, 6, 5 };	
	vector<int> result = remove_dups(src);
	for (unsigned int i = 0; i < result.size(); i++) {
		cout << result[i] << endl;
	}

    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值