STL Iteratoren Syntax Problem



  • Hallo, ich habe Probleme mit der richtigen Sytnax der STL Iteratoren, in diesem Fall find. Waere froh, ueber Hilfe.

    //Auszug der Klassendeklarationen
    template <class T>
    class MyQueue
    {
    ...
    
    class iterator
    {
    ...
    
    }; //end iterator
    
    iterator begin() const { return iterator(m_front); }
    iterator end() const { return iterator(); }
    iterator find(iterator begin, iterator end, T x);
    
    };  //end MyQueue
    
    //find ohne Implementierung
    template <class T>         
    typename MyQueue<T>::iterator MyQueue<T>::find(typename MyQueue<T>::iterator begin, typename MyQueue<T>::iterator end, T x)
    {
    
    }
    
    //Aufruf in main
    MyQueue<int>::iterator position = find(queue.begin(), queue.end(), number);
    

    Sytnaxfehler: find undeclared (first use this function)

    Wo liegt der Syntaxfehler, sodass find nicht aufgerufen werden kann ?

    Danke



  • 1. Es geht hier wohl nicht um STL Iteratoren sondern um deine eigenen.
    2. find ist eine nicht statische Methode deiner MyQueue Klasse und muss daher mit einer Instanz aufgerufen werden.

    MyQueue<int> mq;
    mq.find(...);
    


  • brotbernd schrieb:

    1. Es geht hier wohl nicht um STL Iteratoren sondern um deine eigenen.
    2. find ist eine nicht statische Methode deiner MyQueue Klasse und muss daher mit einer Instanz aufgerufen werden.

    MyQueue<int> mq;
    mq.find(...);
    

    Danke erstmal, ja stimmt es sind meine Iteratoren, sorry.
    Und wie muss find dann deklariert werden, sodass es mit dem Aufruf von oben klappt, also mit:

    MyQueue<int>::iterator position = find(queue.begin(), queue.end(), number);
    


  • namespace mylib
    {
    template<typename T>
    class myqueue
    {
    ...
    };
    
    template<typename Iter, typename T>
    Iter find(Iter first, Iter last, T value);
    
    }
    

    Bist du dir denn sicher, dass du deine eigenen Container und Iteratoren schreiben möchtest?



  • brotbernd schrieb:

    namespace mylib
    {
    template<typename T>
    class myqueue
    {
    ...
    };
    
    template<typename Iter, typename T>
    Iter find(Iter first, Iter last, T value);
    
    }
    

    Bist du dir denn sicher, dass du deine eigenen Container und Iteratoren schreiben möchtest?

    Vielen Dank!

    Naja die Container und Iteratoren schreib ich nur zur Uebung, weil wir sowas in der Klausur machen muessen, ansonsten wuerde ich gern drauf verzichten 🙂



  • Wenn Du schon Iteratoren gebaut hast, wozu dann noch ein extra find anbieten? Dafür gibt es doch std::find, welches beliebige Vorwärts-Iteratoren annehmen kann. Das ist ja gerade der Witz an Iteratoren. Du musst die Algorithmen wie "find" nicht für jeden Container neu erfinden.

    kk



  • ... es sei denn, die Datenstruktur ist eine spezielle, die die Daten speziell soritert hat oder so etwas ...

    Aber MyQueue soll doch ein einfacher Sequenzcontainer sein, oder etwa nicht?



  • krümelkacker schrieb:

    Wenn Du schon Iteratoren gebaut hast, wozu dann noch ein extra find anbieten? Dafür gibt es doch std::find, welches beliebige Vorwärts-Iteratoren annehmen kann. Das ist ja gerade der Witz an Iteratoren. Du musst die Algorithmen wie "find" nicht für jeden Container neu erfinden.

    kk

    Naja, beliebig ist übertrieben. Die STL Algorithm erwarten einige Typdefinitionen im Iterator. Kann man sich entweder zusammensuchen was da benötigt wird oder mit boost iterator facade die Arbeit etwas erleichern.
    Es geht hier ja aber denke ich um eine Übung.



  • brotbernd schrieb:

    Naja, beliebig ist übertrieben.

    Kommt drauf an, was Du unter Iteratoren verstehst. Ich bezog mich mit "Vorwärts-Iterator" natürlich auf das Iterator-Konzept der Standardbibliothek.


Anmelden zum Antworten