Czy można to zapisać prościej ?

0

Witam
Podany kod dodaje elementy z klasy "student" i "grupa" do list. Mam pytanko czy mogę jakoś użyć jednej funkcji push ? czy muszą istnieć dwie osobne dla każdej z klas ?

 
class student {
    char imie;
    char nazwisko ;
};

class grupa {
    char nazwa;
    char kierunek ;
};

typedef struct listS{
    struct listS *next,*prev;
    student key; 
}listaS;

typedef struct listG{
    struct listG *next,*prev;
    grupa key; 
}listaG;

void push(listaS *&head,student x){
    listaS *nowy= new listaS;
    listaS *tmp= new listaS;
    nowy->key = x;
    nowy->next = NULL;
        if(head) {
            tmp=head;
            while(tmp->next) tmp=tmp->next;
            tmp->next=nowy;
            nowy->prev = head;
            }
        else {
            head=nowy;
            tmp->prev=NULL;
        }
    
}

void pushG(listaG *&head,grupa x){
    listaG *nowy= new listaG;
    listaG *tmp= new listaG;
    nowy->key = x;
    nowy->next = NULL;
        if(head) {
            tmp=head;
            while(tmp->next) tmp=tmp->next;
            tmp->next=nowy;
            nowy->prev = head;
            }
        else {
            head=nowy;
            tmp->prev=NULL;
        }
    
}
0

Nie musisz, możesz użyć szablonu.

Możesz też użyć standardoweogo kontenera std::vector lub std::list

0

Zamiast 2 list mozesz zrobic jedna. Po prostu w klasie grupa utworz jakis kontener ze wskaznikami na studentow

class Grupa
{
  //..
  std::vector<Student*> studenci;
}

I jak kolegapowyzej pisal jedna lista std list

2

Najpierw doprowadź do jakiegoś stanu działania a potem próbuj zapisać bardziej optymalnie, np:

    char imie;
    char nazwisko ;

jak zamierasz tu wpisać imie i nazwisko? Pewnie nie rozumiesz o co pytam? Więc z cała pewnością nie zrozumiesz odpowiedzi jak to zapisać prościej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1