码迷,mamicode.com
首页 > 其他好文 > 详细

我要狗带了,该什么时候delete?!!

时间:2016-04-17 22:02:20      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

  1 /*
  2 要求: 1. 定义一个整数集合类 Set,要求该类包含如下属性和操作:
  3 属性:
  4 ① 元素表属性 member[SETSIZE]:是从 0 … SETSIZE –1 范围内的整数中选出 的元素表,其中 SETSIZE 指定整数元素值和表中可以容纳的元素个数的范围,
  5 例如,可以在类外定义: const int SETSIZE = 500;。 注意,元素表 member 的元素值只有两种状态(非 true 即 false)。如果元素 n 对应的元素表的元素值为真(true),
  6 则表示 n 在集合中,即 n∈X 当且仅当 member[n] 为真。 例如,集合 X = {1,4,5,7}对应的元素表中,只有元素 member[1],member[4], member[5],member[7]为真,
  7 而其余元素均为假。
  8 操作: 
  9 ① 构造函数:构造 Set 类对象分两种情况:
 10 ·如果不通过参数传递初值,则在集合对象的构造过程中,元素表 member 的各 个元素被缺省设置为 false,即空元素表。
 11 ·如果将一个整型数组 a[]和数组的元素个数 n 作为参数传递初值,则在集合对象 的构造过程中,元素表中由数组 a[]的元素值作为下标的元素值被设置为 true,
 12 而其他元素设置为 false。
 13 ② 插入元素操作 Insert:通过参数将一个在 0 … SETSIZE –1 范围内的整数 n 插 入集合中,即 member[n] = true。
 14 ③ 删除元素操作 Delete:通过参数将一个在 0 … SETSIZE –1 范围内的整数 n 从集合中删除,即 member[n] = false。
 15 ④ 并集运算操作 operator+:将两个 Set 对象表示的整数集合进行并集运算,并返 回结果集合。
 16 ⑤ 交集运算操作 operator*:将两个 Set 对象表示的整数集合进行交集运算,并返 回结果集合。
 17 ⑥ 属于集合运算操作 operator^:判断一个整数元素是否属于一个指定的 Set 对象 表示的整数集合,并返回结果标志(非 true 即 false)。
 18 被判断的整数元素和整数 集合通过参数传递给操作。
 19 ⑦ 输出操作:通过标准输出流 cout,按集合的表示格式输出显示整数集合
 20 */
 21 #include<iostream>
 22 using namespace std;
 23 class Set
 24 {
 25     int *member;
 26     int SETSIZE;//存放数组a中最大的整型元素
 27     int *a;
 28     int an;
 29 public:
 30     Set() { a = 0; member = 0; }
 31     Set(int n, int p[]);
 32     Set(int n) { member = 0; a = new int[n]; }
 33     void Insert(unsigned int n);
 34     void Delete(unsigned int n);
 35     int* geta() { return a; }
 36     friend Set operator+(Set x, Set y);//并集
 37     friend Set operator*(Set x, Set y);//交集
 38     bool operator^(int op);
 39     void showa();
 40     void showm();
 41     //~Set() { delete[]a; delete[]member; }
 42 };
 43 bool Set::operator^(int op)
 44 {
 45     for (int i = 0; i < an; i++)
 46         if (a[i] == op)
 47             return true;
 48     return false;
 49 }
 50 void Set::showa()
 51 {
 52     for (int i = 0; i < an; i++)
 53         cout << a[i] << endl;
 54 }
 55 void Set::showm()
 56 {
 57     for (int i = 0; i < SETSIZE; i++)
 58         cout << member[i] << endl;
 59 }
 60 Set::Set(int n, int p[])
 61 {
 62     int max = p[0];
 63     for (int i = 0; i < n; i++)
 64         if (p[i]>max)
 65             max = p[i];
 66     SETSIZE = max + 1;//多一个放0 
 67     member = new int[SETSIZE];
 68     an = 0;
 69     
 70     for (int i = 0; i < SETSIZE; i++)
 71         member[i] = 0;
 72     for (int i = 0; i < SETSIZE; i++)
 73         for (int j =0; j < n; j++)//right
 74             if (i == p[j])
 75                 member[i] = 1;
 76     for (int i = 0; i < SETSIZE; i++)
 77         if (member[i])
 78             an++;
 79     
 80     a = new int[an];
 81     int ai = 0;
 82     for (int i = 0; i < SETSIZE; i++)//错误在这里
 83             if (member[i])
 84             {
 85                 a[ai] = i;
 86                 ai++;
 87             }
 88 
 89 
 90 }
 91 void Set::Insert(unsigned int n)
 92 {
 93     if (n <= SETSIZE)
 94         member[n] = 1;
 95     else
 96         cout << "溢出错误!" << endl;
 97 }
 98 void Set::Delete(unsigned int n)
 99 {
100     if (n <= SETSIZE)
101         member[n] = 0;
102     else
103         cout << "不存在你要删除的对象!" << endl;
104 }
105 Set operator+(Set x, Set y)
106 {
107     int suman = x.an + y.an;
108     int *tran = new int[suman];
109     for (int i = 0; i < x.an; i++)
110         tran[i] = x.a[i];
111     for (int i = x.an; i < suman; i++)
112         tran[i] = y.a[i - x.an];
113     Set t(suman, tran);
114     //delete[]tran;//局部调用完了应该没有内存??
115     return t;
116 }
117 Set operator*(Set x, Set y)//wrong
118 {
119     int minan;
120     x.an < y.an ? minan = x.an : minan = y.an;
121     int*p = new int[minan];
122     int mi = 0;
123     for (int i = 0; i <x.an; i++)
124         for (int j = 0; j < y.an;j++)
125             if (x.a[i] = y.a[j])
126             {
127                 p[mi] = x.a[i];
128                 mi++;
129             }
130     int*np = new int[mi];
131     for (int i = 0; i < mi; i++)
132         np[i] = p[i];
133     //delete[]p;//
134     Set t(mi, np);
135     //delete[]np;//
136     return t;
137 }
138 void main()
139 {
140     int n;
141     cin >> n;
142     int *p = new int[n];
143     for (int i = 0; i < n; i++)
144         cin >> p[i];
145     Set A(n, p);
146     cout<<"判断"<<A.operator^(3)<<endl;
147     //delete[]p;//
148     cin >> n;
149     int *t = new int[n];
150     for (int i = 0; i < n; i++)
151         cin >> t[i];
152     cout << endl;
153     Set B(n, t);
154     //delete[]t;//
155     Set C=A+B;
156     C.showa();
157     cout << endl;
158     Set D = A*B;
159     D.showa();
160     
161 }

 

我要狗带了,该什么时候delete?!!

标签:

原文地址:http://www.cnblogs.com/yuelien/p/5402204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!