Probleme mit queue



  • Hi,

    noch eine Frage:
    nun möchte ich das erste Element haben, er gibt mir aber eine Latte von Fehlermeldungen beim Gebrauch von
    speicher.pop()
    hat es mit
    cout << speicher.pop() << endl;
    ausprobiert, aber da sagt er mir:

    no match für "operator <<" in "std::cout << speicher, std::queue<_Tp, _Sequence>::pop [with _TP = int, _Sequence = std::deque<int, std::allocator<int> >]()"

    Kann mir jemand von Euch weiterhelfen, wie ich das hinbekomme?

    Vielen Dank für Eure Geduld! MfG, Ozzy



  • Was du suchst, ist queue::front() .



  • Ja, pop() hat auch keinen return-Wert.
    Wenn dann musst du mit front() auf das gewünschte Elment zugreifen. Mit pop() wird das Element gelöscht.

    Greetz



  • queue<int> speicher;
    speicher.push(12);  
    
    printf("%d \n",speicher.c[0]); // Ausgabe 12
    // bzw. mit cout :::
    cout << speicher.c[0] << endl;
    

    pop löscht (soweit ich das weiß) einfach das Element wieder aus dem Speicher



  • Checker&Murckser schrieb:

    queue<int> speicher;
    speicher.push(12);  
    
    printf("%d \n",speicher.c[0]); // Ausgabe 12
    // bzw. mit cout :::
    cout << speicher.c[0] << endl;
    

    pop löscht (soweit ich das weiß) einfach das Element wieder aus dem Speicher

    Hmmm...das mit dem .c funktioniert glaube ich auch nur in Visual Studio. Warum auch immer. Im Standard ist die Schnittstelle so beschrieben das dieses Feld protected ist. Sehe auch keinen Grund darin, direkt auf den Container zuzugreifen mit dem die queue realisiert wurde.
    Hab eben nochmal in die Header von VS geguckt. Das protected ist vorhanden, aber auskommentiert. 🙄
    Man sollte eigentlich über die entsprechenden Methoden zugreifen, sonst ist die ganze Sache witzlos...

    Greetz



  • ^^ habs nur mit VC++ ausprobiert 😉 🙄

    teste mal mim BCB



  • BCB:

    queue<int> speicher;
    speicher.push(12);
    speicher.push(13);
    int firstitemvalue = speicher._Get_c()[0];
    


  • Vielen Dank, dachte, man würde mit pop auch das erste Element bekommen, und nicht nur löschen.
    Jetzt funktioniert alles, vielen Dank!!!!!

    MfG, Ozzy



  • Checker&Murckser schrieb:

    BCB:

    queue<int> speicher;
    speicher.push(12);
    speicher.push(13);
    int firstitemvalue = speicher._Get_c()[0];
    

    Das ist doch Murks, um dich beim Namen zu nehmen.



  • Ozzy:
    Wenn mal wieder nicht weißt was ne Funktion für einen return-Wert hat, guck hier:
    http://www.cppreference.com/

    Greetz



  • Und nebenbei: Die offizielle Schnittstelle der queue<> besteht aus push() (Element anhängen), pop() (Element entfernen) und top() (erstes Element lesen - das benötigst du). Alle anderen Ansätze verwenden Implementations-Details, die sich je nach Compiler unterscheiden können.



  • @CStoll:
    top() gibt es nur bei der priority_queue<>. Bei queue<> benutzt man front() zum Zugriff auf das zuerst eingefügte Element und pop() zum löschen. Gibt zwar noch back() aber außer um zu sehen welchen Wert man zuletzt eingefügt hat bringt das ja nicht wirklich viel.

    Greetz


Anmelden zum Antworten