`
dotcpp
  • 浏览: 60196 次
  • 性别: 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的用法

    在C++编程中,`std::vector`是一个非常重要的容器,它允许我们动态地存储一组相同类型的元素。在处理这些元素时,有时我们需要删除其中的一个或多个,这就是`erase`函数派上用场的地方。`erase`方法是`std::vector`...

    C++ Vector 删除指定位置元素(csdn)————程序.pdf

    在实际编程中,`erase`函数可能会改变`vector`的大小,因此在删除元素后,通常需要更新任何依赖于`vector`大小或特定位置的迭代器。此外,要注意避免在删除元素后立即使用已无效的迭代器,因为这可能导致未定义的...

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

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

    实现从vector中过滤重复的数据

    在C++编程中,`std::vector`是一个常用的容器,用于存储同类型的元素序列。然而,在处理数据时,我们有时需要去除其中的重复项。这篇博客文章“实现从vector中过滤重复的数据”提供了几种方法来解决这个问题。我们将...

    vector详细用法

    - **删除元素**:使用`erase`成员函数删除指定位置的元素;`pop_back`删除最后一个元素;`clear`清空整个Vector。 - **获取信息**:`size`返回Vector的长度;`empty`判断Vector是否为空。 示例代码如下: ```cpp ...

    MFC的vector小例子

    - 插入和删除元素可能涉及到内存的重新分配,这在性能敏感的代码中应谨慎使用。 这个"MFC的vector小例子"可能是通过创建、填充、操作和显示`std::vector`来展示这些基本概念。通过实践这些操作,开发者可以更好地...

    vector1_STL_C++_vector_

    这使得`vector`能够适应数据量不确定或需要频繁添加/删除元素的情况。`vector`的底层实现通常是一个动态分配的一维数组,当需要增加元素时,如果当前容量不足,会自动进行一次内存重分配,以确保有足够的空间。 ###...

    vector的用法深入解析

    * erase():删除 vector 中指定位置的元素或元素范围。 * pop_back():删除容器的末元素,并不返回该元素。 * clear():删除容器中的所有元素。 四、 vector 的迭代器 vector 提供了两种类型的迭代器:iterator 和...

    自己实现的vector

    5. **删除元素**:`pop_back()`方法移除最后一个元素,如果`vector`为空,不应做任何操作。在其他位置删除元素(如`erase()`方法)可能涉及元素的移动,以填补被删除元素留下的空位。 6. **访问元素**:`at()`和`[]...

    C++ vector的讲解

    删除元素 删除 Vector 中元素可以使用以下方法: * `v.pop_back()` 删除向量中最后一个元素 * `v.clear()` 清空向量中所有元素 * `v.erase(pos)` 删除向量中迭代器指向元素 * `v.erase(first,last)` 删除向量中...

    C语言下的vector

    在C++标准库中,`std::vector`是一种动态数组,它允许我们在程序运行时方便地添加或删除元素。然而,在纯C语言环境下,我们没有内置的类似数据结构。为了在C语言中实现类似STL(Standard Template Library)的`...

    C++代码vector实现

    `vector`允许程序员在运行时改变其大小,可以在末尾高效地添加或删除元素。它是C++中最常用的容器之一,因为它提供了随机访问和连续存储的性能优势。 ### `vector`的基本概念 1. **定义与初始化**:`vector`可以...

    vector源代码下载

    通过这个自定义的`Vec`类,我们可以看到`vector`实现的核心在于动态内存管理和元素的插入、删除。`vector`的动态增长策略通常是每次翻倍容量,以减少频繁的内存分配。这种设计允许`vector`在保持高效访问性能的同时...

    纯c语言向量vector实现vector_master

    2. 插入与删除元素:向量需要提供在两端(头部和尾部)插入和删除元素的功能。`vector_push_back`用于在向量尾部添加元素,`vector_pop_back`用于移除尾部元素。如果需要在头部操作,可能有`vector_push_front`和`...

    c++之vector容器erase操作

    今天我们将深入探讨`vector`的一个关键成员函数——`erase()`,以及如何在容器中删除元素,特别是中间元素。 `std::vector::erase`函数是用来从`vector`中移除一个或多个元素的。它可以接受一个迭代器作为参数,这...

    VC中vector用法

    `vector`提供了多种删除元素的方法: - `pop_back()`:删除最后一个元素。 - `erase()`:可以删除单个元素或一个区间内的元素。 - `clear()`:清空整个`vector`。 ```cpp test.pop_back(); // 删除最后一个元素 ...

    vector的c语言实现

    4. **删除元素**: - `vector_erase`函数用于删除指定索引的元素,后面的元素需要向前移动。 - `vector_pop_back`函数删除最后一个元素。 5. **访问元素**: - `vector_at`函数返回指定索引处的元素,通常需要...

    #include 的用法

    // 插入和删除元素 vec1.push_back(20); // vec1 = {10, 10, 10, 10, 10, 20} vec1.pop_back(); // vec1 = {10, 10, 10, 10, 10} // 访问元素 std::cout () ; // 输出: First element: 10 std::cout () ; //...

Global site tag (gtag.js) - Google Analytics