c语言题目,求解!
定义一个整形数集合类Set,请通过创建动态分配的整数数组(使用new运算符)存放整数值,且数组的大小要能够根据包含元素的个数动态的变化。集合中,元素的顺序无关紧要,每个元...
定义一个整形数集合类Set,请通过创建动态分配的整数数组(使用new运算符)存放整数值,且数组的大小要能够根据包含元素的个数动态的变化。集合中,元素的顺序无关紧要,每个元素至多出现一次。实现如下函数:(1) 构造函数创建一个空集;(2) 复制构造函数实现深复制;(3) add 函数向集合中插入一个整数; (4) 析构函数。在main函数中对上述函数进行测试。
展开
1个回答
展开全部
这是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;
}
#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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询