一个c++小程序出现了有关问题,请大家帮一下
一个c++小程序出现了问题,请大家帮一下。
#include<iostream>
using namespace std;
class TSet
{
private:
int *m_piNumber;
int m_iIndex;
void sort_insert(int iNumber);
public:
TSet();
TSet(int iNum);
~TSet();
void insert(int iNumber);
int get(int iIndex);
int operator[](int iIndex);
void print();
int count();
bool IsExist(int iNumber);
void Show(TSet p);
friend TSet Mix(TSet p1,TSet p2,TSet p3);
friend TSet Union(TSet p1,TSet p2,TSet p3);
};
//function.cpp
#include"function.h"
TSet::TSet()
{
m_iIndex = 0;
m_piNumber =NULL;
}
TSet::TSet(int iNum)
{
m_iIndex = iNum;
m_piNumber = new int[iNum];
}
TSet::~TSet()
{
if(m_piNumber)
delete []m_piNumber;
}
void TSet::sort_insert(int iNumber)
{
for(int i = 0; i < m_iIndex; i++)
{
if(m_piNumber[i] >= iNumber)
{
for(int j = m_iIndex; j > i; j--)
{
m_piNumber[j] = m_piNumber[j-1];
}
m_piNumber[i] = iNumber;
m_iIndex++;
return;
}
}
m_piNumber[m_iIndex++] = iNumber;
}
bool TSet::IsExist(int iNumber)
{
int mid,top,bot;
bool find = false;
top=0;
bot=m_iIndex-1;
find=0;
do
{
mid=(top+bot)/2;
if(iNumber==m_piNumber[mid])
{
find=true;
}
else if(iNumber > m_piNumber[mid])
top=mid+1;
else
bot = mid -1;
} while((top<=bot) && (find==0));
return find;
}
int TSet::get(int iIndex)
{
if(iIndex < 0 || iIndex>=m_iIndex)
return 0;
return m_piNumber[iIndex];
}
int TSet::operator[](int iIndex)
{
if(iIndex < 0 || iIndex>=m_iIndex)
return 0;
return m_piNumber[iIndex];
}
void TSet::print()
{
for(int i = 0; i < m_iIndex; i++)
{
cout << m_piNumber[i] << endl;
}
}
void TSet::insert(int iNumber)
{
if(IsExist(iNumber))
return;
else
sort_insert(iNumber);
}
int TSet::count()
{
return m_iIndex;
}
void TSet::Show (TSet p)
{
for(int i=1;i<=p.m_iIndex;i++)
cout << p[i] << endl;
}
TSet Mix(TSet p1,TSet p2,TSet p3)
{
int cnt = p2.count();
for(int i = 0 ; i < cnt; i++)
{
if(p1.IsExist(p2[i]))
p3.insert(p2[i]);
}
return p3;
}
TSet Union(TSet p1,TSet p2,TSet p3)
{
int cnt = p2.count();
for(int i = 0 ; i < cnt; i++)
{
if(!p1.IsExist(p2[i]))
p3.insert(p2[i]);
}
cnt =p1.count();
for(int j= 0; j< cnt; j++)
{
p3.insert(p1[j]);
}
return p3;
}
//main.cpp
#include<iostream>
#include"function.h"
using namespace std;
int main()
{
TSet p1,p2,p3,p4;
int m=5,n=3;
p1(m);
p2(n);
for(int i=0;i<=m;i++)
{
p1[i]=i+1;
}
for(int j=0;j<=n;j++)
{
p2[j]=j+1;
}
Mix(p1,p2,p3);
Show(p3);
Union(p1,p2,p4);
Show(p4);
return 0;
}
刚才很谢谢有位好心人帮我纠正了function.cpp中的错误,这个函数的main函数我编译时老出错,请大侠指正一下,谢谢!
------解决方案--------------------
#include<iostream>
using namespace std;
class TSet
{
private:
int *m_piNumber;
int m_iIndex;
void sort_insert(int iNumber);
public:
TSet();
TSet(int iNum);
~TSet();
void insert(int iNumber);
int get(int iIndex);
int operator[](int iIndex);
void print();
int count();
bool IsExist(int iNumber);
void Show(TSet p);
friend TSet Mix(TSet p1,TSet p2,TSet p3);
friend TSet Union(TSet p1,TSet p2,TSet p3);
};
//function.cpp
#include"function.h"
TSet::TSet()
{
m_iIndex = 0;
m_piNumber =NULL;
}
TSet::TSet(int iNum)
{
m_iIndex = iNum;
m_piNumber = new int[iNum];
}
TSet::~TSet()
{
if(m_piNumber)
delete []m_piNumber;
}
void TSet::sort_insert(int iNumber)
{
for(int i = 0; i < m_iIndex; i++)
{
if(m_piNumber[i] >= iNumber)
{
for(int j = m_iIndex; j > i; j--)
{
m_piNumber[j] = m_piNumber[j-1];
}
m_piNumber[i] = iNumber;
m_iIndex++;
return;
}
}
m_piNumber[m_iIndex++] = iNumber;
}
bool TSet::IsExist(int iNumber)
{
int mid,top,bot;
bool find = false;
top=0;
bot=m_iIndex-1;
find=0;
do
{
mid=(top+bot)/2;
if(iNumber==m_piNumber[mid])
{
find=true;
}
else if(iNumber > m_piNumber[mid])
top=mid+1;
else
bot = mid -1;
} while((top<=bot) && (find==0));
return find;
}
int TSet::get(int iIndex)
{
if(iIndex < 0 || iIndex>=m_iIndex)
return 0;
return m_piNumber[iIndex];
}
int TSet::operator[](int iIndex)
{
if(iIndex < 0 || iIndex>=m_iIndex)
return 0;
return m_piNumber[iIndex];
}
void TSet::print()
{
for(int i = 0; i < m_iIndex; i++)
{
cout << m_piNumber[i] << endl;
}
}
void TSet::insert(int iNumber)
{
if(IsExist(iNumber))
return;
else
sort_insert(iNumber);
}
int TSet::count()
{
return m_iIndex;
}
void TSet::Show (TSet p)
{
for(int i=1;i<=p.m_iIndex;i++)
cout << p[i] << endl;
}
TSet Mix(TSet p1,TSet p2,TSet p3)
{
int cnt = p2.count();
for(int i = 0 ; i < cnt; i++)
{
if(p1.IsExist(p2[i]))
p3.insert(p2[i]);
}
return p3;
}
TSet Union(TSet p1,TSet p2,TSet p3)
{
int cnt = p2.count();
for(int i = 0 ; i < cnt; i++)
{
if(!p1.IsExist(p2[i]))
p3.insert(p2[i]);
}
cnt =p1.count();
for(int j= 0; j< cnt; j++)
{
p3.insert(p1[j]);
}
return p3;
}
//main.cpp
#include<iostream>
#include"function.h"
using namespace std;
int main()
{
TSet p1,p2,p3,p4;
int m=5,n=3;
p1(m);
p2(n);
for(int i=0;i<=m;i++)
{
p1[i]=i+1;
}
for(int j=0;j<=n;j++)
{
p2[j]=j+1;
}
Mix(p1,p2,p3);
Show(p3);
Union(p1,p2,p4);
Show(p4);
return 0;
}
刚才很谢谢有位好心人帮我纠正了function.cpp中的错误,这个函数的main函数我编译时老出错,请大侠指正一下,谢谢!
------解决方案--------------------