![]() |
#2
laigaoat20052011-04-29 09:09
|

#include<iostream>
using namespace std;
//定义类
class Arr
{
int m; //数组实际元素个数
int a[100];
public:
Arr(int x[],int size)//构造函数,用size始化m,用参数x初始化数组a
{
m=size;
for(int i=0;i<m;i++)
a[i]=x[i];
}
void delsame();
void show()
{
for(int i=0;i<m;i++)
{
cout<<a[i]<<"\t";
if((i+1)%5==0)
cout<<endl;
}
cout<<endl;
}
};
//定义类内函数delsame()
void Arr::delsame()//删除重复数据
{
int i,j;
for(i=0;i<m-1;i++)
{
if(a[i]==a[i+1])
{
for(j=i+1;j<m-1;j++)
{
a[j]=a[j+1];
}
m--;//删除一个数据后元素个数减一
i--;//可能出现连续多个相同的数,so 继续判断当前元素
}
}
}
//主函数
int main()
{
int b[16]={1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10};
Arr v(b,sizeof(b)/sizeof(b[0]));//此行我想不懂
v.show();//显示原数组
v.delsame();
v.show();//显示结果数组
return 0;
}
using namespace std;
//定义类
class Arr
{
int m; //数组实际元素个数
int a[100];
public:
Arr(int x[],int size)//构造函数,用size始化m,用参数x初始化数组a
{
m=size;
for(int i=0;i<m;i++)
a[i]=x[i];
}
void delsame();
void show()
{
for(int i=0;i<m;i++)
{
cout<<a[i]<<"\t";
if((i+1)%5==0)
cout<<endl;
}
cout<<endl;
}
};
//定义类内函数delsame()
void Arr::delsame()//删除重复数据
{
int i,j;
for(i=0;i<m-1;i++)
{
if(a[i]==a[i+1])
{
for(j=i+1;j<m-1;j++)
{
a[j]=a[j+1];
}
m--;//删除一个数据后元素个数减一
i--;//可能出现连续多个相同的数,so 继续判断当前元素
}
}
}
//主函数
int main()
{
int b[16]={1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10};
Arr v(b,sizeof(b)/sizeof(b[0]));//此行我想不懂
v.show();//显示原数组
v.delsame();
v.show();//显示结果数组
return 0;
}
我想问的有两点:(1)关于sizeof,我记得sizeof(数组)得到的是数组中的元素个数,而b数组中的元素个数是已知的,是不是可能这样做:Arr v(b,16);
(2)Arr是类也是构造函数,从程序中可以看出v是定义的对象了,那为什么可以这样定义 Arr v(b,sizeof(b)/sizeof(b[0]));难道Arr在此处可以初始化,还可以定义对象吗?C++中有这种语法吗?