0
vector_dinamic *creeaza_vector()
{
    vector_dinamic *v=malloc(sizeof(vector_dinamic)*capacitate_initiala);
    v->Element=malloc(sizeof(Elements)*capacitate_initiala);
    v->lungimea=0;
    v->capacitatea=capacitate_initiala;
    return v;

}

这是一个动态向量,其中lunimea 是长度,capacitatea 是容量。capcacitatea_initiala 是 100,这意味着我可以存储 100 个元素。

typedef void* Elements;

typedef struct{
    Elements * Element;
    int lungimea;
    int capacitatea;

} vector_dinamic;

我也有这种类型的元素,为了能够在我的向量中存储不同类型的元素,我已经设法进行了添加,但我的问题是如何比较相同类型的两个元素,我想实现删除功能,但我正在努力比较两个元素

typedef struct{
    int numar_apartament;
    int suma;
    char * tipul;
} Cheltuieli;

我有这个元素类型,现在有人可以告诉我如何通过“numar_apartament”比较我的通用向量中的元素吗?

void modifica(vector_dinamic * vector, int numar_apartament)
{
    int i,a=0;
    for (i=0;i<vector->lungimea;i++)
    {
        if (vector->Element[i]->numar_apartament)==element->numar_apartament)
            a=1;
    }
    return a;

}

这是我尝试过的,但我得到了很多错误而且它不起作用......

谢谢!

4

2 回答 2

3

void指针没有任何特定的类型,这就是为什么它们可以指向任何东西。您必须将void指针转换为它们指向的实际类型,以便能够取消引用它们:

((Cheltuieli *) vector->Element[i])->numar_apartament

你也有括号的问题,你缺少一个左括号。

于 2013-03-18T09:53:44.567 回答
1

主要思想是获取指向要比较的变量的指针并使用 memcmp 进行比较。还纠正了一些编译错误,下面是修改后的代码。检查它是否有帮助!

#include "malloc.h"
#include "memory.h"

typedef void* Elements;

typedef struct{
    Elements * Element;
    int lungimea;
    int capacitatea;

} vector_dinamic;

typedef struct{
    int numar_apartament;
    int suma;
    char * tipul;
} Cheltuieli;

vector_dinamic *creeaza_vector()
{
    int capacitate_initiala = 10;
    vector_dinamic *v = (vector_dinamic *)malloc(sizeof(vector_dinamic)*capacitate_initiala);
    v->Element= (Elements *)malloc(sizeof(Elements)*capacitate_initiala);
    v->lungimea = 0;
    v->capacitatea = capacitate_initiala;
    return v;

}

int modifica(vector_dinamic *vector, int numar_apartament)
{
    int i, a = 0;
    Cheltuieli **tmp = (Cheltuieli **)&(vector->Element);
    for (i = 0; i < vector->lungimea; i++)
    {
        if ((memcmp(&(tmp[i])->numar_apartament, &numar_apartament, sizeof(int)) == 0))
            a = 1;
    }
    return a;

}
于 2013-03-18T10:01:14.813 回答