게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
클래스의 크기 질문
게시물ID : programmer_13115짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 371회
댓글수 : 5개
등록시간 : 2015/09/07 10:27:29
아래의 이진탐색 소스에서  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;
}

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호