완전히 일반적인 방법으로 증가하는 해시 테이블을 구현할 것이라는 것을 정확하게 추론하면 void
포인터가 많이 필요합니다.
typedef struct {
size_t capacity, nelems;
void **contents;
} Vector;
enum { INITIAL_CAPACITY = 256 };
Vector *make_vector()
{
Vector *v = malloc(sizeof(Vector));
if (v == NULL)
return NULL;
v->capacity = INITIAL_CAPACITY;
v->contents = malloc(sizeof(void *) * v->capacity);
if (v->contents == NULL) {
free(v);
return NULL;
}
v->nelems = 0;
return v;
}
// exercise for the reader
int vector_append(Vector *, void *);
void *vector_at(Vector const *);
는 일반적인 해시 기능을 사용하면 크기에 전달해야 즉, 프로토 타입
size_t hash(void const *, size_t)
을 가질 것을 유의 사항 : 벡터는 그냥 입력이 많이 걸립니다, 너무 열심히하지 않습니다.
(사이드 노트 : 놓치지 않을 C++의 OOP 기능은 템플릿, 구매하는 유형 안전성, 연산자 오버로딩과 같은 구문 설탕입니다. 자세한 예제는 OpenBSD의 ohash
라이브러리를보십시오.)