问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++如何删除一个数组中的重复元素

发布网友 发布时间:2022-04-23 05:01

我来回答

7个回答

热心网友 时间:2022-04-18 21:59

方法一、

vector<int> sun;

//向sun添加元素

for (int i = 0; i < n; ++i)

{

sun.push_back(primes[i]);

}

sort(sun.begin(), sun.end());

//使用 erase 删除

sun.erase(unique(sun.begin(), sun.end()), sun.end());

earse的功能是删除指定范围内的所有函数;unique将相邻的重复的元素移到最后。

方法二、

排序函数(sort)和去重函数都在<algorithm>头文件中。

#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;

int main() {

vector<int> v;

cout << "Number of vector's element : " << endl;

int number;

cin >> number;

for (int i = 0; i < number; i++) {

int temp;

cin >> temp;

v.push_back(temp);

}

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

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

for (int i = 0; i < v.size(); i++) {

cout << v[i] << " ";

}

cout << endl;

return 0;

}

unique()函数将重复的元素放到vector的尾部然后返回指向第一个重复元素的迭代器再用erase函数擦除从这个元素到最后元素的所有的元素.


扩展资料:

return的用法:

return的作用是结束正在运行的函数,并返回函数值。return后面可以跟一个常量,变量,或是表达式。

1、函数的定义一般是这样的,例如:

inta(inti)第一个int是函数的返回值的类型,也就是return后面跟的值的类型,a是函数的名称,括号里的是传递给函数的参数,int是参数的类型,i是参数的名字

.../省略函数体内容

returnb;//b必须与函数头的返回值一致(此处为int型)

2、简单函数举例:

intaddOne(intb)

returnb+1;

该函数的作用是取得一个数,将这个数加上1,再将结果返回。

3、调用时:

intresult=addOne(2);//此时result的值为3

函数括号里的参数也可以为变量或能算出值的表达式

以上就是一个基本的函数,一般的函数都有返回值,也就是return后面跟的值,返回值可以为各种数据类型,如:int,float,double,char,a[](数组),*a(指针),结构或类(c++)

但不是所有函数都有返回值,如果某个函数无返回值,那么返回值的位置则为“void”关键字,此时函数体中无返回值,即无return的值。但是函数中也可出现return,即一个空的return句子,其作用是使函数立即结束,如voidprint()//括号中为空表示无传递参数、

printf("a");

printf("b");

return;//函数执行到此处结束

printf("c");

}//该函数只执行到return语句处,即屏幕上输出的为"ab"

热心网友 时间:2022-04-18 23:17

以整型数组为例,参考代码如下:

int remove_repeat(int *a, int l)//对起始地址为a,长度为l的数组进行去重,新的长度以返回值形式返回。

{

int i,j, r=0; //i,j为循环下标,r为去重后元素总数,初始值为0

for(i = 0; i < l; i ++)

{

for(j = 0; j < r; j ++)//检查是否重复

if(a[j] == a[i]) break;

if(j == r) //没有重复元素

a[r++] = a[i]; //将当前元素放置与去重后数组的尾部,并增加去重后的总数。

}

return r; //返回新的长度。

}

展资料:

c++关键字

if,else

条件语句的组成部分。if表示条件,之后else表示否定分支。

enum

构成枚举类型名的关键字。C++11新增带作用域的枚举,用enum class或enum struct(两者等价)声明。

explicit

这个关键字修饰构造函数声明,表示显式构造函数(模版),显式构造函数不参与特定的重载。

mutable

用于类的非静态非const数据成员,表示不受到成员函数的const的*,可以在const成员函数中使用。

operator

和操作符连用,指定一个重载了的操作符函数,也包括operator new和operator delete。

参考资料来源:百度百科-C++

热心网友 时间:2022-04-19 00:51

可以使用双重循环,逐一对比元素,如有重复,则删除的方法去重。

其思路为

1、依次遍历循环中的每一个元素。

2、对于任意一个元素,依次与之前的元素进行对比,如果有重复则删除。

3、删除操作可以采用将后续元素逐个前移,达到覆盖当前元素的效果。


在此基础上可以进行一点优化,即,不需要每次删除元素均前移所有元素,而是把需要保留的元素放到"应该"放的位置即可,这样可以提高效率。

以整型数组为例,参考代码如下:

int remove_repeat(int *a, int l)//对起始地址为a,长度为l的数组进行去重,新的长度以返回值形式返回。
{
    int i,j, r=0; //i,j为循环下标,r为去重后元素总数,初始值为0
    
    for(i = 0; i < l; i ++)
    {
        for(j = 0; j < r; j ++)//检查是否重复
            if(a[j] == a[i]) break;
        if(j == r) //没有重复元素
            a[r++] = a[i]; //将当前元素放置与去重后数组的尾部,并增加去重后的总数。
    }
    
    return r; //返回新的长度。
}

热心网友 时间:2022-04-19 02:43

#include <stdio.h>
#define N 1000
#define FLAG 0x80000000 /*特殊标记,用最小的负数表示*/
void main( )
{
int r[N], length, i, j;
scanf("%d", &length);
for(i = 0; i < length; i++)
scanf("%d", &r[i]);
for(i = 0; i < length - 1; i++)
{
if(r[i] != FLAG)
{
for(j = i + 1; j < length; j++)
if(r[j] == r[i]) r[j] = FLAG; /*遇到重复值,则先用特殊标记覆盖它*/
}
}
for(i = 0; r[i] != FLAG; i++); /*找到第一个特殊标记*/
for(j = i + 1; j < length;) /*删除数列中的特殊标记*/
{
if(r[j] != FLAG) r[i++] = r[j++];
else j++;
}
length = i; /*修改删除重复值后的数列的长度*/
for(i = 0; i < length; i++)
printf("%-4d", r[i]);
}

热心网友 时间:2022-04-19 04:51

如果是使用STL的话,可以参考如下代码:

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

int main()
{
vector<int> buf(5, 2);
for (int i = 0; i < 5; i++)
buf.push_back(rand());
// 上面一段是为了生成测试数据
// vector<int>::iterator 这个是定义了个迭代器
vector<int>::iterator it;

// 输出去重之前的元素
for (it = buf.begin(); it != buf.end(); it++)
    cout << *it << " ";
cout << endl;

// 先对数据进行排序(必须的)
sort(buf.begin(), buf.end());
// unique()函数就是去重用的
// 去重原理:找到重复的数据后移动到最后,然后返回第一个重复的元素的地址
it = unique(buf.begin(), buf.end());
// 删掉重复的元素
buf.erase(it, buf.end());

// 输出去重后的元素
for (it = buf.begin(); it != buf.end(); it++)
    cout << *it << " ";
cout << endl;
}
// 以上就是利用STL的方法


如果不是使用STL的话,只是对某个数组进行去重的话,可以参考这个过程:

1、进行排序(依然可以调用sort())

2、对比相邻两个元素,相同就删掉一个

热心网友 时间:2022-04-19 07:15

准备睡了,马上随叫了,说一下大概思路:
1、双层循环便利。
2、最后循环一下,赋值给目标数组。
搞定,打完收工。如果还不理解,追问吧。少年追问看不懂
我处于初级水平

热心网友 时间:2022-04-19 09:57

//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void main(void){
int i,j,k,a[]={4,78,3,2,19,0,56,56,8,7,3,1,90,86,437,918,0,1},ln;
for(ln=sizeof(a)/sizeof(int),k=i=1;i<ln;i++){
for(j=0;j<k;j++)
if(a[j]==a[i]) break;
if(j>=k) a[k++]=a[i];
}
for(i=0;i<k;printf("%d ",a[i++]));//Look at...
printf("\n");
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
谁能给个单机版的风云之雄霸天下啊?? 求风云雄霸天下PC单机游戏WIN7版 雄霸天下任务指南 开心网001老房子卖了以后家具还有吗? 为什么001开心网买房子组件删除仓库里的东西都没了 请教一下,开心001的开心庄园里面的建材有好多富余的的 除了5元一个卖... 开心网001小号怎么给大号送房子? 开心网001多少级能送别人房子?多少级能接受别人给的房子? 开心网001果实或家具能送人吗 开心网(kaixin001)怎么买外地房子? C++ STL vector erase函数中,有没有重新分配内存? C++中A是字符串,A.erase(0,1)是什么意思? C++关于vector的erase函数的问题 C++ STL 中 remove 和 erase 的区别 string类中erase函数的实现怎样的 c语言字符串删除 编程自定义一个删除函数:erase(),要求对其进行重载,既能删除一维 erase()函数对器皿干了啥 我是个C++菜鸟。我想问一下,c++ string类中的erase()函数怎么用的 最好可以举例说明一下 有关于C++中string的erase函数的问题 C++中的erase操作 C++:erase删除容器中元素 C++ STL中erase函数的用法 求助~~ C++erase的问题 C++erase函数的使用 C++中string中的erase函数怎么使用 JAVA语言的特点? 为什么我的电脑连接上了打印机,打印机却不能打印 什么是承兑汇票贴现? 激光打印机和喷墨打印机的区别是什么? c++ 里面的erase()和insert()的问题。 C++高手啊,过来帮帮忙吧,vector里面的函数erase怎么用的?你们看我的这个为什么就有错误呢?? 椰子肉怎么吃呢? 椰子肉的正确吃法是什么? 三年级给校长的一封信怎么写 给校长的一封信500字表达自己对学校感谢之情和美好祝愿! 给校长的一封信(建议书) 要有格式,500字以上!! 这是作业紧急!!!_百度... 作文给校长的一封信 椰子肉怎么吃? 给校长的一封信400字作文 椰肉可以怎么吃? 给校长的一封信(意见书)300字左右 椰肉怎么吃吗? 一位即将毕业的小学生给中学校长的一封信 致校长的一封信作文怎么写? 一位即将毕业的小学生给中学校长的一封信 作文 急!!! 给校长的一封信 作文 给校长的一封信 写烦恼的作文 谁能给我 给校长的一封信 这篇作文啊 要口水话多点的,作文几乎能用在所有的学校。我下学期开校初2 一篇作文,题目是给校长的一封信,主要反映年级的情况