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;

}

これは、lugimea が長さ、capacicatea が容量である動的ベクトルです。capcacitationa_initiala は 100 です。これは、100 個の要素を格納できることを意味します。

typedef void* Elements;

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

} vector_dinamic;

私はまた、要素のないこの型を持っています。異なる型の要素を私の vector に格納できるようにするために、追加を行うことができましたが、私の質問は、同じ型の 2 つの要素をどのように比較できるかです。実装したいです。削除機能ですが、2つの要素を比較するのに苦労しています

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 に答える