아래의 이진탐색 소스에서 cout<<"Dict의 크기"<<sizeof(Dict)<<endl;의 값이 8이 나오더군요.
클래스에서 포함된 함수는 함수포인터가 아니면 사이즈와 상관 없으니까 제외하면
struct node
{
int key;
};
struct node *a;
int n;
결국 위의 node구조체의 변수 a의 포인터와 int형 n변수, 그리고 node형에 포함된 int key변수 이 세개의 사이즈가 Dict의 크기인데
근데 왜 Dict의 사이즈가 8이 나오나요?
12가 나오는 게 정상이 아닌가요?
어째서 struct node안에 포함된 int형의 key변수는 Dict형의 전체사이즈에서 제외되어야 하는지 알고 싶네요.
#include <iostream.>
#include <time.h>
#include <stdlib.h>
using namespace std;
const int N=10;
class Dict
{
public:
Dict(int max)
{
a=new node[max];
n=0;
}
~Dict()
{
delete a;
}
int search(int search_key);
void insert(int v);
private:
struct node
{
int key;
};
struct node *a;
int n;
};
int Dict::search(int search_key)
{
int left=1;
int right=n;
int mid;
while(right>=left)
{
mid=(left+right)/2;
if(a[mid].key==search_key)
return mid;
if(a[mid].key>search_key)
right=mid-1;
else left=mid+1;
}
return -1;
}
void Dict::insert(int v)
{
a[++n].key=v;
}
void init(int key[],int search_key[])
{
int i,index,temp[N+1];
for(i=1;i<=N;i++){
key[i]=i;
search_key[i]=i;
temp[i]=0;
}
srand(time(NULL));
for(i=1;i<=N;i++)
{
index=rand()%N+1;
if(temp[index]==0)
temp[index]=search_key[i];
else{
while(temp[index]!=0)
index=(index%N)+1;
temp[index]=search_key[i];
}
}
for(i=1;i<=N;i++){
search_key[i]=temp[i];
}
}
int main()
{
Dict d(N+1);
cout<<"Dict의 크기"<<sizeof(Dict)<<endl;
cout<<"d의 크기"<<sizeof(d)<<endl;
int i,result,key[N+1],search_key[N+1];
double start_time;
init(key,search_key);
for(i=1;i<=N;i++)
d.insert(key[i]);
start_time=clock();
for(i=1;i<=N;i++)
{
result=d.search(search_key[i]);
if(result==-1||key[result]!=search_key[i])
{
cout<<"탐색오류"<<endl;
}
}
cout<<"이진 탐색의 실행시간(N"<<N<<"):"<<clock()-start_time<<endl;
cout<<"탐색 완료"<<endl;
}