数组　是C++　语言重要的数据结构,对它的一些基本操作要熟练掌握。那么,今天我们就来讨论,怎么　去除数组　中重复的数字?　案例　题目描述　给你N个数(n),每个数都在(0~1000)之间,其中由很多重复的数字,请将重复的...　去除重复数字　数组是C++语言重要的数据结构,对它的一些基本操作要熟练掌握。那么,今天我们就来讨论,怎么去除数组中重复的数字?　案例　题目描述　给你N个数(n<=100),每个数都在(0~1000)之间,其中由很多重复的数字,请将重复的数字只保留一个,并将剩下的数由小到大排序并输出。　输入　输入有2行。　第1行为1个正整数,表示数的个数:N　。　第2行有N个用空格隔开的整数。　样例输入　输出　第1行为1个正整数M,表示不相同数的个数。　接下来的M行,每行一个整数,表示从小到大排好序的不相同的数。　样例输出　程序代码　方法一　#　include　　using　namespace　std　;　int　main　思路:去除重复的元素,对剩余的元素进行排序　去除重复的方法一:读入每个元素都判断下一个数组中是否存在该元素　如果存在就不存入数组,如果不存在再存储　*/　int　i　,　n　,　a　[　110　]　,　x　,　j　,　t　;　bool　f　;　//　用来标记读入的元素是否出现过　int　k　=　0　;　//　表示目前数组中实际不重复的元素个数　cin　>>　n　;　//　i代表将要读入n个数,相当于是一个计数器　for　(　i　=　0　;　i　<　n　;　i　++　)　{　cin　>>　x　;　//判断x在a数组中是否存在(a数组有k个元素)　f　=　false　;　//　假设a数组中没有元素x　//　循环a数组的k的元素　for　(　j　=　0　;　j　<　k　;　j　++　)　{　if　(　a　[　j　]　==　x　)　{　f　=　true　;　break　;　//　停止当前循环　}　}　//　如果数组a中没有元素x,则将x存入数组　if　(　f　==　false　)　{　a　[　k　]　=　x　;　k　排序　for　(　i　=　1　;　i　<　k　;　i　++　)　{　for　(　j　=　0　;　j　<=　k　-　i　-　1　;　j　++　)　{　if　(　a　[　j　]　>　a　[　j　+　1　]　)　{　t　=　a　[　j　]　;　a　[　j　]　=　a　[　j　+　1　]　;　a　[　j　+　1　]　=　t　输出　cout　<<　k　<<　endl　;　for　(　i　=　0　;　i　<　k　;　i　++　)　{　cout　<<　a　[　i　]　<<　endl　;　}　}　方法二　#　include　　using　namespace　std　;　int　main　思路:去除重复的元素,对剩余的元素进行排序　去除重复的方法二:由于读入的元素在　0　~　1000　之间,我们准备一个长度为1001的数组　用来标记　x　有没有出现过　*/　int　i　,　n　,　a　[　110　]　,　x　,　j　,　t　;　int　f　[　1001　]　=　{　0　}　;　//　标记数组　int　k　=　0　;　//　表示目前数组中实际不重复的元素个数　cin　>>　n　;　//　i代表将要读入n个数,相当于是一个计数器　for　(　i　=　0　;　i　<　n　;　i　++　)　{　cin　>>　x　;　//　如果数组a中没有元素x,则将x存入数组　if　(　f　[　x　]　==　0　)　{　a　[　k　]　=　x　;　k　++　;　//　修改标记,标记x出现了　f　[　x　]　=　1　排序　for　(　i　=　1　;　i　<　k　;　i　++　)　{　for　(　j　=　0　;　j　<=　k　-　i　-　1　;　j　++　)　{　if　(　a　[　j　]　>　a　[　j　+　1　]　)　{　t　=　a　[　j　]　;　a　[　j　]　=　a　[　j　+　1　]　;　a　[　j　+　1　]　=　t　输出　cout　<<　k　<<　endl　;　for　(　i　=　0　;　i　<　k　;　i　++　)　{　cout　<<　a　[　i　]　<<　endl　;　}　}　参考地址　为了提供原生数据类似功能/性能.元素直接放实例中,非堆上...用函数模板代替类模板,　c++　函数模板允许部分推导.　元<型名　R,型名　P,整N,整...I>　常式　数组　到　数组　实现(P(&a)[N],序列g配置段　=　{　1　,　2　,　5　,　6　,　7　,　9　,　3　,　4　}　;　用　函数模板　代替　类模板　,　c++函数模板　允许部分推导.　元<型名　R　,　型名　P　,　整N,整...I>常式　数组　<　R　,　N　>　到数组实现　(　P　(　&　a　)　[　N　]　,　序列　<　I　无异　{　中{{a[I元<型名　T　,　整N>常式　动　至数组　(　T　(　&　a　)　[　N　]　)　无异　{　中　到数组实现　<　移常易　<　T　>　,　T　,　N　>　(　a　,　造序　<　N　元<型名　R　,　型名　P　,　整N,整...I>常式　数组　<　R　,　N　>　到数组实现　(　P　(　&&　a　)　[　N　]　,　序列　<　I　无异　{　中{{移动　(　a　[　I　元<型名　T　,　整N>常式　动　至数组　(　T　(　&&　a　)　[　N　]　)　无异　{　中　到数组实现　<　移常易　<　T　>　,　T　,　N　>　(　移动　(　a　)　,　造序　<　N　动　g配置段　=　至数组　<　整>({1,2,5,6,7,9,3,4});但模板参数推导　拒绝隐式转换　初化列表　元素.不行,　然后增加模板参数,让　输入数组/返回元素　用不同　类型　.添加:　元<型名　R　,　型名　P　,　整N>常式　动　到类型数组　(　P　(　&　a　)　[　N　]　)　无异　{　中　到数组实现　<　R　,　P　,　N　>　(　a　,　造序　<　N　元<型名　R　,　型名　P　,　整N>常式　动　到类型数组　(　P　(　&&　a　)　[　N　]　)　无异　{　中　到数组实现　<　R　,　P　,　N　>　(　移动　(　a　)　,　造序　<　N　这两个函数带　3个模板参数　,第1个为　返回型　.　动　g配置段　=　到类型数组　<　正32　型>({1,2,5,6,7,9,3,4});但溢出呢?　动g_a　=　到类型数组　<　正8型>({256　,　-　1　}　)　;　编译期校验.　理想是:　编译期生成数组自动校验　.用　模板参数　.用　数组元素　作为　模板的非类型参数　.用动确定模板的　非类型参数　.　元<型名　T　>　常式　空　检查整区间　(　)　无异　{　}　元<型名　T　,　动M,动...N>常式　空　检查整区间　(　)　无异　{　静断　(　!　(　(　数值极限　<　T　>　::　最小　(　)　>=　0　)　&&　(　M　<　0　静断　(　(　M　>=　数值极限　<　T　>　::　最小　M　<=　数值极限　<　T　>　::　最大　检查整区间　<　T　,　N　元<型名　T　,　动...N>常式　动　声明数组　(　)　无异　{　检查整区间　<　T　,　N　数组　<　T　,　型长　.　.　.　(　N　)　>　a　{　{　静转　<　T　>　(　N　中a;};用静断　来　校验　.　声明数组　用法:　常式　动a1　=　声明数组　<　正8型,1,2,3,4,255　>　(　)　;　静断　(　a1　.　大小　(　)　==　5　)　;　静断　(　a1　[　3　]　==　4　)　;　动a2　=　声明数组　<　正8型,1,2,3,-1>();动a3　=　声明数组　<　正16　型,1,2,3,65536　>　(　)　;　声明成　模板参数　了.而如果这样:　元<型名　T　,　T　.　.　.　N　>　常式　动　声明数组　(　)　无异　在　校验　前已是　T　型,也可用　正64型,整64型　.而　数组元素是自定义类型　,可通过　自定义构造函数　来控制　转换类型　.　编译期生成数组　常式　只能返回　单个值　,　stl　不能为　编译期常量　,　原生数组　退化为　指针　.返回　数组引用　也不行.　常式　整*函数　(　)　无异　{　整a[]={1,2,3,4};中a;}不行的.但标::数组　既可作　编译期常量　,也可为　函数返回值　.因而作为　编译期返回集合　数据的　首选　.冒泡:　元<型名　T　,　整N>常式　数组　<　T　,　N　>　排序　(　常　数组　<　T　,　N　>　&　数字　)　无异　{　数组　<　T　,　N　>　排序　(　数字　)　;　对(整i=0;ii;--　j　)　{　如(排序　[　j　]　>=　排序　[　j　-　1　]　)　下;Tt=排序　[　j　]　;　排序　[　j　]　=　排序　[　j　-　1　]　;　排序　[　j　-　1　]　=　t　;　}　}　中　排序　;　}　整主(){常式　数组　<　整,4>在前　{　4　,　2　,　3　,　1　}　;　常式　数组　<　整,4>在后　=　排序　(　在前　)　;　静断　(　在后　[　0　]　==　1　)　;　静断　(　在后　[　1　]　==　2　)　;　静断　(　在后　[　2　]　==　3　)　;　静断　(　在后　[　3　]　==　4　)　;　中0;}编译期　排序,快排　也可以.注意　常式　不能调用　非常式(如,交换,排序)　.传入参数为　常　,不能　原位　排序,必须返回　新数组　.好处是:　有数组越界等,编译会失败　.编译期测试　能提前拦截　,　编译通过,即测试通过　.　自定义数组相等:　元<型名　T　,　型名　U　,　整M,整N>常式　极　等于实现　(　常T&左边　,　常U&右边　)　{　静断　(　M　==　N　)　;　对(整i=0;i　常式　极　等于　(　常T&左边　,　常U&右边　)　{　中　等于实现　<　T　,　U　,　大小　(　左边　)　,　大小　(　右边　)　>　(　左边　,　右边　)　;　}　元<型名　T　,　型名　U　,　整N>常式　极　等于　(　常T&左边　,　常U(&右边　)　[　N　]　)　{　中　等于实现　<　T　,　常U(&)[N],大小　(　左边　)　,　N　>　(　左边　,　右边　)　;　}　整主(){常式　数组　<　整,4>在前　{　4　,　2　,　3　,　1　}　;　常式　数组　<　整,4>在后　=　排序　(　在前　)　;　静断　(　等于　(　在后　,　{　1　,　2　,　3　,　4　静断　(　!　等于　(　在前　,　在后　)　)　;　中0;}其中,　标::大小　能返回　容器/数组大小　,这里　只允许编译期确定的大小　.两个版本.因为　c++　禁止　推导{...}这种初化列表字面量为模板参数类型　,必须　声明参数类型为数组　.可同样生成其他　编译期集合常量　.如　定长　自然数序列:　元<型名　T　,　整N>常式　动　自然数　(　)　无异　{　数组　<　T　,　N　>　数组　{　0　}　;　对(整i=0;i　常式　T　奇数　(　整i)无异　{　中i*2+1;}元<型名　T　>　常式　T　斐波那契　(　整i)无异　{　如(i<=　1　)　中1;中斐波那契　<　T　>　(　i　-　1　)　+　斐波那契　<　T　>　(　i　-　2　)　;　}　元<型名　T　,　整N,型名　F　,　整...I>常式　数组　<　移常易　<　T　>　,　N　>　生成数组实现　(　F　f　,　序列　<　I　无异　{　中{{f(I元<整N,型名　F　,　型名　T　=　调果型　<　F　,　整>>　常式　数组　<　T　,　N　>　生成数组　(　F　f　)　无异　{　中　生成数组实现　<　T　,　N　>　(　f　,　造序　<　N　整主(){常式　动　奇数　=　生成数组　<　5　>　(　奇数　<　正8型>);静断　(　等于　(　奇数　,　{　1　,　3　,　5　,　7　,　9　常式　动　斐波列数　=　生成数组　<　5　>　(　斐波那契　<　正32　型>);静断　(　等于　(　斐波列数　,　{　1　,　1　,　2　,　3　,　5　常式　动　指定　=　生成数组　<　3　整i){中i+10　静断　(　等于　(　指定　,　{　10　,　11　,　12　}　)　)　;　中0;}还可传　λ函数　作为　参数　来生成数组.但要求　c++17　.　截取子数组　就类似　子串　了.用λ作为　生成函数　.　元<整N,型名　T　>　常式　动　子数组　(　T　&&　t　,　整基)无异　{　中　生成数组　<　N　>　(　[　基,t=前向　<　T　>　(　t　)　]　(　整i){中t[基+i元<整N,型名　T　,　整M>常式　动　子数组　(　常T(&t)[M],整基)无异　{　中　生成数组　<　N　>　(　[　基,&t](整i){中t[基+i整主(){常式　动x=子数组　<　3　>　(　{　1　,　2　,　3　,　4　,　5　,　6　}　,　2　)　;　静断　(　等于　(　x　,　{　3　,　4　,　5　常式　动x1　=　子数组　<　2　>　(　x　,　1　)　;　静断　(　等于　(　x1　,　{　4　,　5　常式　正8型a[]={9,8,7,6,5};常式　动y=子数组　<　2　>　(　a　,　3　)　;　静断　(　等于　(　y　,　{　6　,　5　常式　常符*串="[!串000]"　;　常式　动z=子数组　<　5　>　(　串,6);静断　(　等于　(　z　,　{　'w'　,　'o'　,　'r'　,　'l'　,　'd'向量　<　整32　型>v{10　,　11　,　12　,　13　,　14　}　;　整n=2;动d=子数组　<　3　>　(　v　,　n　)　;　断定　(　等于　(　d　,　{　12　,　13　,　14　}　)　)　;　中0;}N为大小,　基为开始　,可为　运行时　,当然也可　编译时　.　入参都是编译时时　,生成的　子数组　也是编译时了.两个版本,可传入　初化列表　.还可以:　元<型名　T　>　常式　动　总长　(　常T&数组　)　无异　{　中　大小　(　数组　)　;　}　元<型名　P　,　型名　.　.　.　T　>　常式　动　总长　(　常P&p,常T&...数组　)　无异　{　中　大小　(　p　)　+　总长　(　数组　元<型名　T　>　常式　动　选取元素　(　整i,常T&数组　)　无异　{　中　数组　[　i　]　;　}　元<型名　P　,　型名　.　.　.　T　>　常式　动　选取元素　(　整i,常P&p,常T&...数组　)　无异　{　如(i<大小　(　p　)　)　中p[i];中选取元素　(　i　-　大小　(　p　)　,　数组　元<型名　.　.　.　T　>　常式　动　连接数组　(　常T&...数组　)　无异　{　中　生成数组　<　总长　(　数组　数组　整i){中选取元素　(　i　,　数组　整主(){常式　整32　型a[]={1,2,3};常式　动b=到类型数组　<　整32　型>({4,5,6});常式　动c=声明数组　<　整32　型,7,8常式　动x=连接数组　(　a　,　b　,　c　)　;　静断　(　等于　(　x　,　{　1　,　2　,　3　,　4　,　5　,　6　,　7　,　8　}　)　)　;　中0;}拼接　.用　模板参数　兼容　原生数组与数组　.也可拼接　自定义类型　,但未适配　初化列表　,因而不能:　常式　动x=连接数组　(　a　,　{　4　,　5　,　6　}　)　;　但可以先　转数组　.　常式　动x=连接数组　(　a　,　至数组　(　{　4　,　5　,　6　}　)　)　;　编译期拼接字符串　原生这样:　符串[]="abc"　;　调用　数据　方法,　数组　就会返回　串针　.　常式　动串=至数组　(　"abc"　)　;　静断　(　串.大小　(　)　==　4　)　;　静断　(　等于　(　串,"abc"　)　)　;　输出　<<　串.数据　(　)　;　串字面量为　符[]　类型,也能拼接,但结果不一样:　常式　动串=连接数组　(　"abc"　,　"定义"　)　;　静断　(　串.大小　(　)　==　8　)　;　静断　(　等于　(　串,{'a'　,　'b'　,　'c'　,　'\0'　,　'd'　,　'e'　,　'f'　,　'\0'当然可去掉　\0　.　元<动E>常式　动　选取符　(　整i){中E;}元<动E,型名　P　,　型名　.　.　.　T　>　常式　动　选取符　(　整i,常P&p,常T&...数组　)　{　如(i<(大小　(　p　)　-　1　)　)　{　如(p[i]==　E　)　抛"[!串001]"　;　中p[i];}如(p[大小　(　p　)　-　1　]　!=　E　)　抛"[!串002]"　;　中　选取符　<　E　>　(　i　-　(　大小　(　p　)　-　1　)　,　数组　元<型名　.　.　.　T　,　动E='\0'　>　常式　动　连接串　(　常T&...串){中生成数组　<　总长　(　串　型长　.　.　.　(　T　)　+　1　>　(　[　&　串整i){中选取符　<　E　>　(　i　,　串整主(){常式　符a串003]"　;　常式　动b=至数组　(　"[!串004]"　)　;　常式　动串=连接串　(　a　,　b　,　"C+静断　(　等于　(　串,"[!串005]中0;}在其中,校验　串长=容器长-1　,编译期异常产生编译时错误,　没必要运行时调用它　,有人想　编译期计算串长度　:　元<型名　T　,　动E='\0'　>　常式　整　串长　(　常T&串)无异　{　整i=0;当(串[i]!=　E　)　++　i　;　中i;}常式　常符*g串　=　"abc"　;　整主(){常式　动串=子数组　<　串长　(　g串)+1>(g串　,　0　)　;　静断　(　等于　(　串,"abc"　)　)　;　中0;}然而,　c++常式　要求　输入参数为常式时　允许结果为　常式　,函数内部　非常式　.　用万恶的宏?　:　#定义　到数组串　(　x　)　子数组　<　串长　(　x　)　+　1　>　(　x　,　0　)　常式　常符*g串　=　"abc"　;　整主(){常式　动串=连接串　(　到数组串　(　g串),"定义"　)　;　静断　(　等于　(　串,"6字母"中0;}都可以　传递指针　类型,用　变参宏　还可以定义出　按实际串长计算结果串长　的更通用　拼接函数　.但我们　只做编译期拼接　.不搞　那么复杂　.　c++20　:　数组有常式版本比较符　,函数可用　常求值　表明只在　编译时　调用.　模板非类型　可允许更多　类型　.　stl　容器,可作　常式　常量.　这还只是小更新　,　万恶的c++!　注意:　c++　用　完美转发　的话,会禁止推导　{...}　为　模板类型参数　,因而不能用　初化列表　作为入参.　常式　限定　指针　时,表示　指针　本身为　常量　,而　非所指对象　为　常量　,与常不一样,不允许把　常式　放在　类型声明表达式中间　.因此,　编译期计算常式指针指向的串　长度,　该串必须在静态数据区　.不能位于　栈/堆中,因为无法确定其　地址　.　最近尝试使用Python调用C++函数,发现网上都是一些简单的例子,涉及到Python　Numpy数组与　C++数组　转换的例子比较少,所以花费了一些时间,搞懂了SWIG使用numpy.i接口文件完成Numpy与C++数组　转换。相比于其它几种方式...　给定一个N阶方阵int[]mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(　C++　中为vector>),保证n小于等于300,矩阵中的元素为int范围内。　测试样例:　[[1,2,3],[0,1,2],[0,0,1]]　返回:[[0,0,3],[0,0,0],[0,0,0]]...　因为学习　数组　的是时候,看课居多,所以,今天敲得程序有点少,做的联系有点少,之后慢慢的补上,勤加练习!!!　//　数组　的定义方式　/*　int　nums[25];　char　array_of_name[30]　int　num[]　=　{198,45,63,123}