用类实现集合的交集,出错了,(>_<)...

MAXDAVID 2011-10-25 09:00:51
#include <iostream>
using namespace std;

class set
{
int*element;
int number;
public:
set () {element=NULL;number=0;}
set(const int e[],int n)
{
element=new int[n];
int*temp=element;
for(int i=0;i<n;i++)
*temp++=e[i];
number=n;
}
set(const set & t)
{
number=t.number;
element=t.element;
}
int GetOneAt(int i) const //得到第i个数
{
int*temp=element;
return *(temp+i);
}
int isMemberOf(int t) const
{
for(int index=0;index<number;index++)
if(GetOneAt(index)==t)
return index+1;
return 0;
}
void AddOne(int t)
{
if(isMemberOf(t))
return;
else
{
int*temp=element+number;
*temp=t;
number++;
}
}
set InSection(const set & B) const
{
set C;
for (int index=0; index<number; index++)
{
int i=GetOneAt(index);
if (B.isMemberOf(i))
C.AddOne(i);
}
return C;
}
void Print() const
{
int*temp=element;
for(int i=1;i<=number;i++)
cout<<*temp++<<" ";
}
};

void main()
{
int a[3]={1,2,3},b[4]={1,5,6,7};
set A(a,3);
set B(b,4);
set C(A.InSection(B));
C.Print();
C.PrintN();
}

我刚学C++,上面的程序我想了好几天都没做成,一直出错....
...全文
52 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序员小迷 2012-02-09
  • 打赏
  • 举报
回复
InSection函数里调用AddOne函数,
InSection函数里构造了临时对象Set C; 但是C什么都没有,element和number的值都是0, 导致C.AddOne(i)因为空指针挂掉
MAXDAVID 2011-10-25
  • 打赏
  • 举报
回复
楼上大神水平好高!!!不过非常感谢!
赵4老师 2011-10-25
  • 打赏
  • 举报
回复
仅供参考
#include <algorithm>
#include <iostream>
#include <functional>
#include <cstring>
using namespace std;
int main() {
char *Alphabet = "abcdefghijklmnopqrstuvwxyz" ;
char *Vowels = "aeiou" ;
char *AlphaNum = "0123456789abcdef" ;
char result[45] ;
char *last ;

int lenA = strlen(Alphabet) ;
int lenV = strlen(Vowels ) ;
int lenAN = strlen(AlphaNum) ;

cout << "Alphabet = " << Alphabet << endl ;
cout << "Vowels = " << Vowels << endl ;
cout << "AlphaNum = " << AlphaNum << endl ;

cout << "\nusing non-predicate versions" << endl ;

//non-predicate set_difference
last = set_difference(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result) ;
*last = 0 ;
cout << "set_difference(Alphabet, AlphaNum) = " << result << endl ;

//non-predicate set_intersection
last = set_intersection(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result) ;
*last = 0 ;
cout << "set_intersection(Alphabet, AlphaNum) = " << result << endl ;

//non-predicate set_symmetric_difference
last = set_symmetric_difference(Alphabet, Alphabet+lenA,
Vowels , Vowels +lenV,
result) ;
*last = 0 ;
cout << "set_symmetric_difference(Alphabet, Vowels) = " << result << endl ;

//non-predicate set_union
last = set_union(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result) ;
*last = 0 ;
cout << "set_union(Alphabet, AlphaNum) = " << result << endl ;

cout << "\nusing predicate versions" << endl ;

//predicate set_difference
last = set_difference(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result , less<char>()) ;
*last = 0 ;
cout << "set_difference(Alphabet, AlphaNum) = " << result << endl ;

//predicate set_intersection
last = set_intersection(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result , less<char>()) ;
*last = 0 ;
cout << "set_intersection(Alphabet, AlphaNum) = " << result << endl ;

//predicate set_symmetric_difference
last = set_symmetric_difference(Alphabet, Alphabet+lenA,
Vowels , Vowels +lenV,
result , less<char>()) ;
*last = 0 ;
cout << "set_symmetric_difference(Alphabet, Vowels) = " << result << endl ;

//predicate set_union
last = set_union(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result , less<char>()) ;
*last = 0 ;
cout << "set_union(Alphabet, AlphaNum) = " << result << endl ;

return 0 ;
}
MAXDAVID 2011-10-25
  • 打赏
  • 举报
回复
但默认构造函数要怎么定义呢?请具体说一下...
柯本 2011-10-25
  • 打赏
  • 举报
回复
你的默认构造有问题:
set () {element=NULL;number=0;}

set InSection(const set & B) const 函数中

set C; //element=NULL
然后在
C.AddOne(i);
int*temp=element+number; ///element==NULL,非法地址

MAXDAVID 2011-10-25
  • 打赏
  • 举报
回复
程序的算法应该没有错,但运行的时候就会显示“Cpp.exe已停止工作”,程序就运行不了....
luciferisnotsatan 2011-10-25
  • 打赏
  • 举报
回复
出什么错?说一下

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧