c++删除排序数组中的重复项-打印新数组
c++ Remove the duplicates in sorted array - print the new array
我正在c++中测试这段代码
#include <iostream>
using namespace std;
int removeDuplicates(int A[], int n) {
if(n == 0) return 0;
int index = 0;
for(int i=0; i<n; i++)
{
if(A[index] == A[i])
{
continue;
}
index++;
A[index] = A[i];
}
cout<<"New array is "<<A[index]<<endl;
return index+1;
}
int main(){
int x[10] = {1,1,6};
int n = 3;
int z = removeDuplicates(x, n);
cout<<"Length is "<<z;
}
长度的结果是正确的。但是,当cout新数组时。结果只有6。缺少1。
我应该把cout<<"New array is "<<A[index]<<endl;
放在哪里
将结果作为New array is 16
给我
我需要添加更多代码?请帮忙,有人吗?
std::unique
和std::erase
是您的朋友。
std::vector
也是一个好朋友。
顺便说一句,你的程序确实正确地删除了重复项;只是输出语句没有显示比单个值6更多的数组。
for(int i=0; i<n; i++)
{
if(A[index] == A[i])
{
continue;
}
index++;
A[index] = A[i];
}
让我们追踪:A={1,1,6};n=3;
1ºi=0;index=0->a[0]==a[0]?->继续
2ºi=1;index=0->a[0]==a[1]?->继续
3ºi=2;index=0->a[0]==a[2]?->没有,所以索引++->a[1]=a[2];
新数组为:{1,6,6}。索引的值为=1,所以您打印:
cout<lt;"新数组是"<6
您将返回index=2和A={1,6,6}。这是一个正确的结果,你的算法有效,但打印没有意义。您应该在返回中使用打印:
#include <iostream>
using namespace std;
int removeDuplicates(int A[], int n)
{
if(n == 0) return 0;
int index = 0;
for(int i=0; i<n; i++)
{
if(A[index] == A[i])
{
continue;
}
index++;
A[index] = A[i];
}
return index+1;
}
int main()
{
int x[10] = {1,1,6};
int n = 3;
int size = removeDuplicates(x, n);
cout<<"Length is "<<size<<endl;
for (int i = 0; i<size; i++)
{
cout<<x[i]<<' ';
}
}
这非常有效:)。但是,你有一个标准库的功能:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int x[10] = {1,1,6};
int n = 3;
int* end = unique(x,x+n); // returns reference to the end
for (int i = 0;(x+i) != end; i++)
{
cout<<x[i]<<' ';
}
}
您可以在此处查看unique的引用:http://www.cplusplus.com/reference/algorithm/unique/
不要使用std::unique
和std::erase
,而是在一行中使用std::unique_copy
和std::ostream_iterator<>
。让我这样做:
unique_copy(begin(ar),end(ar),ostream_iterator<T>(cout,"n"));
其中ar
是任何STL序列容器,T
是其value_type
相关文章:
- 动态分配的聊天数组打印缺失的数据和空
- 对象数组打印空白字符串
- 数组打印"random"值时出现问题
- 数组打印出垃圾值
- 数组打印奇怪的字符,例如 ∟ @
- 测量我的随机数数组打印的时间始终显示为 0 秒
- 数组打印出错误的数字
- 从对象数组打印字符串对象
- 您好,如何防止此函数使用质数数组打印 1
- 如何从主内部的数组打印总计
- 如何将数组打印为矢量形式
- 有人能给我一些关于在C++中使用数组打印出丰富、完美和不足的数字的提示吗
- 为什么我的C++数组打印相同的值
- 如何阻止我的数组打印地址
- 将值输入到结构数组 + 打印输出
- C++11 为什么 cout 从布尔数组打印大整数
- 从字符串数组打印其中一个字符串时出现空指针赋值错误
- 将无符号字符数组打印为十六进制
- 缩短的数组打印错误的结果
- C++中的字符串数组:打印额外的字符