c语言题目,求解!

定义一个整形数集合类Set,请通过创建动态分配的整数数组(使用new运算符)存放整数值,且数组的大小要能够根据包含元素的个数动态的变化。集合中,元素的顺序无关紧要,每个元... 定义一个整形数集合类Set,请通过创建动态分配的整数数组(使用new运算符)存放整数值,且数组的大小要能够根据包含元素的个数动态的变化。集合中,元素的顺序无关紧要,每个元素至多出现一次。实现如下函数:(1) 构造函数创建一个空集;(2) 复制构造函数实现深复制;(3) add 函数向集合中插入一个整数; (4) 析构函数。在main函数中对上述函数进行测试。 展开
 我来答
YZX浪子
2020-06-20 · TA获得超过110个赞
知道小有建树答主
回答量:260
采纳率:86%
帮助的人:58.7万
展开全部
这是c++啊...
#include <iostream>
#include <stdexcept>

using namespace std;

class Set {
protected:
int* arr;
int len;

public:
Set(void) {
arr = new int[0];
len = 0;
}
Set(const Set& right) {
len = right.len;
arr = new int[len];
memmove(arr, right.arr, right.len * sizeof(int));
}
~Set(void) {
delete[] arr;
}

inline int& operator[](int i) {
if (i >= len || i < 0) { throw invalid_argument("i"); }
return arr[i];
}
inline const int& operator[](int i) const {
if (i >= len || i < 0) { throw invalid_argument("i"); }
return arr[i];
}
inline int size(void) const {
return len;
}

int find(int a) const {
for (int i = 0; i < len; i++) {
if (arr[i] == a) {
return i;
}
}

return -1;
}

void resize(int newLen, int val) {
if (newLen < 0 || newLen == len) {
return;
}

int* p = new int[newLen];
memmove(p, arr, ((len < newLen) ? len : newLen) * sizeof(int));
delete[] arr;
arr = p;

if (newLen > len) {
do {
arr[len] = val;
} while (++len < newLen);
}
else {
len = newLen;
}
}

void add(int a) {
int index = find(a);
if (-1 == index) {
resize(len + 1, a);
}
}
};

void Show(const Set& a) {
for (int i = 0; i < a.size(); i++) {
cout << a[i] << ", ";
}
cout << endl;
}

int main(int argc, const char* const argv[]) {
Set a;
a.add(5);
Show(a);
a.add(8);
Show(a);
a.add(5);
Show(a);

return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式