`
dotcpp
  • 浏览: 59509 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

vector删除相同的元素

阅读更多

这是我在百度知道里面遇到的一个问题,准备实现这个功能的时候,以为这个问题很简单,做的时候才发现有很多问题。

很多人想到的就是用:

sort(v.begin(), v.end());
unique(v.begin(), v.end());

 但我想试过的人都知道这方法不行【原因我还在找】

 

我的方法是用set,因为set自动会删除相同的元素,在百度里面有会朋友用的双循环(这方法简单易懂)。代码如下:

#include <vector>
#include <set>
#include <iostream>
using namespace std;

void removeDup1(vector<int>& k)
{
	vector< int >::iterator r , w ;
	
	set< int > tmpset ;
	
	for( r = k.begin() , w = k.begin() ; r != k.end() ; ++r )
	{
		if( tmpset.insert( *r ).second )
		{
			*w++ = *r ;
		}
	}
	
   k.erase( w , k.end() );
}

void removeDup2(vector<int> &l) {
	for(vector<int>::iterator iter1=l.begin(); iter1!=l.end(); iter1++) {
		for(vector<int>::iterator iter2=iter1+1; iter2!=l.end(); ) {
			cout<<*iter1<<"  "<<*iter2<<endl;
			if(*iter1==*iter2) {
				l.erase(iter2);
			}
			else
				iter2++;   //只有在没有删除操作的情况下,下移指针
		}
	}
}


int main(int argc, char* argv[])
{
    vector< int > k ;

    k.push_back( 2 );
    k.push_back( 1 );
    k.push_back( 6 );
    k.push_back( 1 );
    k.push_back( 4 );
    k.push_back( 6 );
    k.push_back( 2 );
    k.push_back( 1 );
    k.push_back( 1 );

   removeDup1(k);

    vector< int >::iterator r ;

    for( r = k.begin() ; r != k.end() ; ++r )
    {
            cout << *r << "    " ;
    }

	system("pause");
}

 

 其中removeDup1使用的是set,removeDup2用的就是双循环。两种方法的优缺点很明显。

 

   written by .cpp

   百度空间: http://hi.baidu.com/anglecloudy 

   JAVAEYE:http://dotcpp.iteye.com/

分享到:
评论

相关推荐

    vector中删除元素erase的用法

    erase的用法删除vector中特定的元素。非常简单实用。

    C++ vector删除符合条件的元素示例分享

    C++ vector中实际删除元素使用的是容器vecrot std::vector::erase()方法。C++ 中std::remove()并不删除元素,因为容器的size()没有变化,只是元素的替换。 1.std::vector::erase() 函数原型:iterator erase ...

    自己编写的类vector类

    自己编写的类vector类,可以实现vector的大部分功能。 该类包含的功能有: 初始化: 默认初始化 拷贝初始化 列表初始化 使用数目和值进行初始化 ... erase 从容器删除元素 clear 清除容器所有元素 &gt; &gt;= == !=

    C++中vector和map的删除方法(推荐)

    序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素。 vector&lt;int&gt; c; for(vector&lt;int&gt;::iterator it = c.begin(); it != c.end();) { if(need_delete()) ...

    vector list map 遍历删除制定元素 防止迭代器失效的实例

    #include &lt;vector&gt; #include #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { printf(“run main”); vector&lt;int&gt; vect ; vect.push_back(1); vect.push_back(2); vect.push_ba

    vector, list, map在遍历时删除符合条件的元素实现方法

    测试vector, list, map遍历时删除符合条件的元素 本代码测试环境: ubuntu12 + win7_x64 */ #include #include &lt;vector&gt; #include #include #include using namespace std; void Remove1(vector&lt;int&gt; &vec, int...

    基于C#编程建立泛型Vector数据类型及对应处理方法

    代码介绍地址:...本博客所描述的Vector是一个泛型,具有不同数值类型Vector向量构造、新增、删除、查询、更改、深度复制、显示元素值、vector运算、排序等功能。整体代码如下所示。 不足之处,敬请斧正

    Java基础–为什么ArrayList,Vector等都不支持循环中remove?

    Vector不使用迭代器删除元素5. Vector流删除元素 JDK中有很多的数据结构,可以让我们操作数据。 操作数据一般都是增删改查,排序等操作。 其实,在Vector,ArrayList,LinkedList中,删除有两种方式进行删除: 1.循环...

    C++Vector用法详解.pdf

    **练习基本操作:**通过编写代码来练习 vector 的基本操作,例如添加、删除和遍历元素。 **探索高级功能:**一旦你掌握了基础知识,就可以探索 vector 的高级功能,例如容量管理、迭代器和算法。 **阅读文档:**查阅...

    go_vector是基于C ++ std :: Vector的容器数据结构。 go_vector带来了功能编程,并删除了样板代码。-Golang开发

    代码示例*摘自文档/examples/main.go*中的片段*构造一个空的向量var播放器GoVector.Vector播放器= players.Init()追加一个元素player.PushBack(newPlayer)删除一个元素player.RemoveAt(index)获取元素在索引...

    关于c++ 定义两个vector数组对象实现以下操作:

    一、定义两个vector对象,分 别存放int、float数组元素,实现以下操作: ...3.向数组中间插入、删除元素 4.将数组首部和尾部元素删除 5.向数组首部和尾部插入元素 每次修改数组均输出当前数组元素。

    基于C#编程建立Vector数据类型及对应处理方法

    建立一个类,需要考虑需要什么样的...Step0432:删除元素 Step0433:删除指定长度连续的字符串 Step0434:根据索引删除字符串 Step0435:查询元素对应的索引 Step0436:在指定位置前插入向量 Step044:运算符重载 ……

    vector的使用 C++ Builder窗口代码演示

    编译环境: Windows 7 Service Pack 1 ... vector它是线性数组,通过下标可以快速找到元素O(1),可以在一端末尾快速添加和删除元素O(1), 查找元素只能遍历O(n),遍历可以用循环,也可以用迭代器。

    C++(STL库)之顺序容器vector的使用

    在尾部之外的位置插入或删除元素可能很慢 ②元素保存在连续的内存空间中,因此通过下标取值非常快 ③在容器中间位置添加或删除元素非常耗时 ④一旦内从重分配,和原vector相关的指针,引用,迭代器都失效。内存重...

    C++中vector容器的常用操作方法实例总结

    1 获得容器最后一个元素   —— 使用 back或rbegin 取得 ...需要删除某位置的元素,应使用iterator遍历, 不应使用at(i) 方式遍历,因为删除元素时,是根据iterator位置进行删除的。 删除元素时,

    C++标准模板库vector的常用操作

    一:介绍 vector是C++标准模板库,是一个容器,底层是数组,为连续内存。 命名空间为std,所属头文件为&lt;vector&gt; 注意:不是&lt;vector&gt; vector存储数据时,会分配一个存储空间,如果继续...尾部删除元素:vector.pop_back

    基于list循环删除元素,迭代器失效的问题详解

    问题的关键是:在删除元素之前,将当前迭代器保存下来。当然,这里仅支持list,因为list的链式的删除一个元素,前面的指针指向下一个元素,vector和queue就不好办了,它们或者是线性的或者是半线性半链式,迭代器会...

Global site tag (gtag.js) - Google Analytics