단어를 이해
데이터 구조, 개체 또는 사물의 집합을 통해 필요가 내부의 방법의 구체적인 구현을 모르는
예를 들면
중고 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);
}
위의 코드를보고 난 후에, 우리는 운전 반복자가 실제로 선박의 작동 것으로 나타났습니다