描述:
把代码补充完整,定义Array类,以实现如下的输出。Array类只保存构造函数的数组参数中不重复的数字,Array类的add方法用于把参数中新出现的数字保存在已有数字的后面,Array类的display方法用于显示保存的所有数字。其他地方不得添加代码。
#include<iostream>
using namespace std;
//这里应该是Array类的定义
int main()
{
int a[] = { 4,1,2,3,4,1,3,5,1 };
int b[] = { 5,4,10,4,2,7,7 };
Array array1(a, sizeof(a) / sizeof(int)); //这时array1里应当保存4、1、2、3、5
Array array2(b, sizeof(b) / sizeof(int)); //这时array2里应当保存5、4、10、2、7
array1.display(); //按照保存的先后顺序输出所有数字,用空格相隔 4 1 2 3 5
array2.display(); // 5 4 10 2 7
array1.add(&array2); //把array2中的数字加入到array1中,但不包括已经在array1中出现的数字
array1.display(); //4 1 2 3 5 10 7
return 0;
}
输出内容:
4 1 2 3 5
5 4 10 2 7
4 1 2 3 5 10 7
以下是ARRAY类的定义,附有注释:
class Array {
private:
int* arr;
int size;
public:
Array(int a[], int s) {
size = 0;
arr = new int[s];//设置一个长度和原数组相同的空的arr数组
for (int i = 0; i < s; i++)
{
bool duplicate = false;
for (int j = 0; j < size; j++)
{
if (a[i] == arr[j])
{
duplicate = true;
break;
}
}//遍历arr数组的所有元素与a[i]比较,若a[i]与arr中的已有元素有相同,bool值=1且退出循环
if (!duplicate) //仅当bool值=0时,数组arr才会有a[i]中的新元素,之后进行下一个循环
{
arr[size] = a[i];
size++;
}
}
}
void add(Array* a) {
for (int i = 0; i < a->size; i++)
{
bool duplicate = false;
for (int j = 0; j < size; j++)
{
if (a->arr[i] == arr[j])
{
duplicate = true;
break;
}
}//和上面基本相同,但是现在是遍历arr和a->arr[i]比较
if (!duplicate) {
arr[size] = a->arr[i];
size++;
}
}
}
void display() {
for (int i = 0; i < size; i++) {
if(i<size-1) cout << arr[i] << " ";
else cout<< arr[i];
}
cout << endl;
}
};
通过逐一比较的方法判断是否有重复元素,是巧妙还是笨呢?