c - 创建非排序通用 array的通用搜索函数

  显示原文与译文双语对照的内容

我正在创建具有功能和数据结构的个人通用库。

我有一个通用向量


typedef struct vector
{
 int max;
 int size;
 void **data;
} vector_t;

我为向量创建了函数:


int vector_new( vector_t * v, int vecsize );
int vector_add( vector_t *v, void *elem );
int vector_remove( vector_t * v, void *elem);
void vector_free( vector_t *v );

如果元素中没有元素,则在 remove函数的实现中添加元素,如果元素不存在,则添加该元素。 我创建了一个函数搜索 ( 。因为我不想对插入的元素进行排序) 来查找可能的重复项。

我对我必须传递给函数的1st 参数的类型有疑问。 我希望创建函数搜索,不仅用于这里用途,而且。

在 remove() 中,我像这样调用它: search(v->data, elem);,但是函数的Prototype是怎样的?


int search(???, void * e );

我知道 1st 参数可能是一个 array 。 但我不知道是 void* 还是 void**
重要的是,这个函数不仅适用于我所创建的结构和函数。

时间:

听起来你需要定义一个函数指针来比较向量中的相等性。 然后可以将它的作为参数添加到搜索方法中


typedef bool (*vector_equals)(void* pLeft, void* pRight);
int vector_search(vector_t* v, vector_equals callback);

现在假设我有一个包含 int 值的向量。 我可以像这样定义我的回调


bool vector_int_equals(void* left, void* right) {
 int* intLeft = left;
 int* intRight = right;
 return *left == * right;
}

我愿意 int search(void **array, unsigned int size, void *data);
这是因为你总是在 array 中搜索指针( 什么都不重要),所以 void *的array 看起来是正确的。

你可能还想考虑比较是做什么的。 如果它是指针之间的简单 ==,那么它很简单。 但是如果你需要别的东西可能会更复杂。

...