C 언어와 디자인 패턴 (반복자 패턴)

기사 디렉토리

단어를 이해

데이터 구조, 개체 또는 사물의 집합을 통해 필요가 내부의 방법의 구체적인 구현을 모르는

예를 들면

 중고 C ++ 반복자 친구는 아마 너무 익숙한 패턴이 아니다. 이 코드를 작성할 때 우리는 반복자없이 할 수 없기 때문에, 큐 반복자는, 벡터는 반복자를 가지고있다 주로이다. 왜 반복자 그것? 이것은 보편적 인 데이터 액세스 방법을 추출하기 위해 주로이다.
 예를 들어, 현재 데이터 컨테이너가,

typedef struct _Container
{
    int* pData;
    int size;
    int length;
 
    Interator* (*create_new_interator)(struct _Container* pContainer);
    int (*get_first)(struct _Container* pContainer);
    int (*get_last)(struct _Container* pContainer);
 
}Container;

우리는 컨테이너가 반복자를 생성 할 수 있습니다 것을 알 수있다. 반복자는 무엇입니까?

typedef struct _Interator
{
    void* pVector;
    int index;
 
    int(* get_first)(struct _Interator* pInterator); 
    int(* get_last)(struct _Interator* pInterator);
}Interator; 

우리는 차이점은 무엇입니까 중간 컨테이너가 get_first, 반복자는 get_first있는 것을 볼?

int vector_get_first(struct _Container* pContainer)
{
    assert(NULL != pContainer);
 
    return pContainer->pData[0];
}
 
int vector_get_last(struct _Container* pContainer)
{
    assert(NULL != pContainer);
   
    return pContainer->pData[pContainer->size -1];
}
 
int vector_interator_get_first(struct _Interator* pInterator)
{
    Container* pContainer;
    assert(NULL != pInterator && NULL != pInterator->pVector);
 
    pContainer = (struct _Container*) (pInterator->pVector);
    return pContainer ->get_first(pContainer);
}
 
int vector_interator_get_last(struct _Interator* pInterator)
{
    Container* pContainer;
    assert(NULL != pInterator && NULL != pInterator->pVector);
 
    pContainer = (struct _Container*) (pInterator->pVector);
    return pContainer ->get_last(pContainer);
}

위의 코드를보고 난 후에, 우리는 운전 반복자가 실제로 선박의 작동 것으로 나타났습니다

게시 44 개 원래 기사 · 원 찬양 6 · 전망 6707

추천

출처blog.csdn.net/qq_23929673/article/details/103549826