pairs in listen und deren ausgabe/löschung



  • wir wollen pair ausgeben, aus einer liste von pairs aber irgendwie funktioniert das nich so:

    list<pair<int,int> >::iterator schreib;
    for(schreib = liste.begin(); schreib != liste.end(); schreib++) {
    cout << *schreib << endl;
    }

    kann uns da einer vielleicht mal weiter helfen!?
    beim löschen ergibt sich dann das selbe prob noch mal...



  • "Funktioniert nicht so" ist keine hilfreiche Fehlerbeschreibung. Speziell für das Löschproblem hilft das bei der Diagnose GARNICHT.

    Bei der Ausgabe schätze ich wird das Problem sein dass es keinen operator<< für pairs gibt. Du musst schreib->first und schreib->second getrennt ausgeben.



  • thx, das ging schnell...
    hatten es auch schon mit schreib.first versucht aber das ging auch nich... aber so gehts jetz, thx

    was bräuchte man denn für die diagnose!?

    list<pair<double,int> >::iterator loeschEs;
    for (loeschEs = elementListe.begin(); loeschEs!= elementListe.end(); loeschEs++) {
    delete *loeschEs;
    }
    so hatten wirs versucht... mit -> gehts hier leider auch nicht...

    compiler gibt das aus:
    type `struct pair<double,int>' argument given to `delete', expected pointer

    sry, wir haben hier noch nich so viel ahnung von zweite vorlesung gehört und scho sollen wir das können...



  • Warum willst du etwas löschen, dass du gar nicht erzeugt hast?
    Du kannst nur delete aufrufen wenn du auch new aufgerufen hast. Das hast du in dem Fall aber gar nicht und dein delete würde zu einem Absturz führen, weil du den Speicher freigibst für den du nicht zuständig bist, sondern std::list.



  • wir hatten ein beispiel mit ner char* liste und da war das so gezeigt, wie gesagt wir haben kaum ahnung...
    wir wollen halt die liste leeren um sie dann noch mal neu befüllen zu können...



  • Bei char* ist es auch was anderes, in deinem Fall musst du nur elementListe.clear(); schreiben.



  • prograNix schrieb:

    ...
    list<pair<double,int> >::iterator loeschEs;
    ...
    delete *loeschEs;
    ...
    type `struct pair<double,int>' argument given to `delete', expected pointer
    ...

    Das spricht doch für sich selbst: Nur aus dem Englischen ins Deutsche übersetzen:
    "Typ `struct pair<double,int>' als Argument für 'delete' übergeben, [aber] ein Zeiger wird erwartet" ...

    Kurz gesagt: "delete löscht Heap-Speicherbereich, die ihm (per Zeiger) übergeben werden" ... offensichtlich ist das hier gar nicht der Fall.

    Möchtest Du evtl. Elemente aus der Liste entfernen ? Dann musst Du die geeignete Funktion von list verwenden .. Hier findest Du was dazu.

    Gruß,

    Simon2.



  • prograNix schrieb:

    list<pair<double,int> >::iterator loeschEs;
    for (loeschEs = elementListe.begin(); loeschEs!= elementListe.end(); loeschEs++) {
    delete *loeschEs;
    }
    so hatten wirs versucht... mit -> gehts hier leider auch nicht...

    compiler gibt das aus:
    type `struct pair<double,int>' argument given to `delete', expected pointer

    Steht doch da, delete erwartet einen Pointer und wenn du mit * den "Pointer" (eigentlich Iterator) dereferenzierst übergibst du delete das Objekt und nicht einen Pointer darauf 🙄
    Ohne * würde es klappen, ist aber wie gesagt gar nicht nötig.


Anmelden zum Antworten