这是我在百度知道里面遇到的一个问题,准备实现这个功能的时候,以为这个问题很简单,做的时候才发现有很多问题。
很多人想到的就是用:
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/
分享到:
相关推荐
erase的用法删除vector中特定的元素。非常简单实用。
C++ vector中实际删除元素使用的是容器vecrot std::vector::erase()方法。C++ 中std::remove()并不删除元素,因为容器的size()没有变化,只是元素的替换。 1.std::vector::erase() 函数原型:iterator erase ...
自己编写的类vector类,可以实现vector的大部分功能。 该类包含的功能有: 初始化: 默认初始化 拷贝初始化 列表初始化 使用数目和值进行初始化 ... erase 从容器删除元素 clear 清除容器所有元素 > >= == !=
序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素。 vector<int> c; for(vector<int>::iterator it = c.begin(); it != c.end();) { if(need_delete()) ...
#include <vector> #include #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { printf(“run main”); vector<int> vect ; vect.push_back(1); vect.push_back(2); vect.push_ba
测试vector, list, map遍历时删除符合条件的元素 本代码测试环境: ubuntu12 + win7_x64 */ #include #include <vector> #include #include #include using namespace std; void Remove1(vector<int> &vec, int...
代码介绍地址:...本博客所描述的Vector是一个泛型,具有不同数值类型Vector向量构造、新增、删除、查询、更改、深度复制、显示元素值、vector运算、排序等功能。整体代码如下所示。 不足之处,敬请斧正
Vector不使用迭代器删除元素5. Vector流删除元素 JDK中有很多的数据结构,可以让我们操作数据。 操作数据一般都是增删改查,排序等操作。 其实,在Vector,ArrayList,LinkedList中,删除有两种方式进行删除: 1.循环...
**练习基本操作:**通过编写代码来练习 vector 的基本操作,例如添加、删除和遍历元素。 **探索高级功能:**一旦你掌握了基础知识,就可以探索 vector 的高级功能,例如容量管理、迭代器和算法。 **阅读文档:**查阅...
代码示例*摘自文档/examples/main.go*中的片段*构造一个空的向量var播放器GoVector.Vector播放器= players.Init()追加一个元素player.PushBack(newPlayer)删除一个元素player.RemoveAt(index)获取元素在索引...
一、定义两个vector对象,分 别存放int、float数组元素,实现以下操作: ...3.向数组中间插入、删除元素 4.将数组首部和尾部元素删除 5.向数组首部和尾部插入元素 每次修改数组均输出当前数组元素。
建立一个类,需要考虑需要什么样的...Step0432:删除元素 Step0433:删除指定长度连续的字符串 Step0434:根据索引删除字符串 Step0435:查询元素对应的索引 Step0436:在指定位置前插入向量 Step044:运算符重载 ……
编译环境: Windows 7 Service Pack 1 ... vector它是线性数组,通过下标可以快速找到元素O(1),可以在一端末尾快速添加和删除元素O(1), 查找元素只能遍历O(n),遍历可以用循环,也可以用迭代器。
在尾部之外的位置插入或删除元素可能很慢 ②元素保存在连续的内存空间中,因此通过下标取值非常快 ③在容器中间位置添加或删除元素非常耗时 ④一旦内从重分配,和原vector相关的指针,引用,迭代器都失效。内存重...
1 获得容器最后一个元素 —— 使用 back或rbegin 取得 ...需要删除某位置的元素,应使用iterator遍历, 不应使用at(i) 方式遍历,因为删除元素时,是根据iterator位置进行删除的。 删除元素时,
一:介绍 vector是C++标准模板库,是一个容器,底层是数组,为连续内存。 命名空间为std,所属头文件为<vector> 注意:不是<vector> vector存储数据时,会分配一个存储空间,如果继续...尾部删除元素:vector.pop_back
问题的关键是:在删除元素之前,将当前迭代器保存下来。当然,这里仅支持list,因为list的链式的删除一个元素,前面的指针指向下一个元素,vector和queue就不好办了,它们或者是线性的或者是半线性半链式,迭代器会...