über zwei vectoren gleichzeitig iterieren?



  • IrgendeinName schrieb:

    M10n schrieb:

    wenn man das nicht gewusst hat und immer ausgeschrieben hat fühlt das sich wie betrug an. keine nachteile?

    Nicht soweit ich weiss.

    Gab einen Thread dazu.



  • TravisG schrieb:

    Nicht das ich wüsste. Hast du einen spezifischen Grund, warum du es so machen musst?

    Genau!
    Halt mal nicht so hinter dem Berg mit dem eigentlichen Problem. Evtl. gibt es auch einen fertigen Algorithmus.



  • oke, werd ich mal suchen...
    direkte folgefrage:
    warum kann ich in einer template-funciton sowas nicht machen

    template<class T>
    void mean_deviation(const std::vector<T> & data , T & mean , T & deviation ) {
    ...
    for(std::vector<T>::iterator current_data_point =  data.begin(); current_data_point != data.end() ; ++ current_data_point){
    ..
    }
    ...
    

    also der iterator kann so nicht da stehen....



  • da fehlt ein typename:

    typename std::vector<T>::iterator
    


  • Weil der Compiler nicht weiß, ob iterator eine Funktion oder ein Typ ist. Da std::vector<T>::iterator hier von T abhängig ist, ist es ein dependent name/type.

    Da der Compiler nun nicht weiter weiß, nimmt er an, dass iterator eine Membermethode ist. Was in einen Compiler-Fehler resultiert.

    Lösung:
    Davor muss also ein** typename **(was genau das zurechtbiegt).



  • vielen Dank ,
    auch das muss ich zu meiner schande gestehen wusste ich einfach nicht...
    heisst das jeder vom template abhängige typ muss nach typedef stehen?



  • M10n schrieb:

    heisst das jeder vom template abhängige typ muss nach typedef stehen?

    Du meinst typename .

    Ja.



  • ahh , perfekte erklärung, typename also. Vielen Dank, werde ich nicht mehr vergessen. 😉



  • Nimm doch bitte einfach auto...



  • Kellerautomat schrieb:

    Nimm doch bitte einfach auto...

    wenn dein Compiler C++11 kann und es aktiviert ist.



  • Mir ist kein Commpiler bekannt, der auto nicht schon hat...



  • Kellerautomat schrieb:

    Mir ist kein Commpiler bekannt, der auto nicht schon hat...

    Und wie ist es bei dir mit Versionen?



  • Wie meinen?



  • Kellerautomat schrieb:

    Wie meinen?

    Je nach dem, unterstützt die Version seines Compilers die er installiert hat (vielleicht hat er ja GCC 4.4 oder so) automatic type deduction vielleicht noch nicht 🙂



  • Dann ist er aber selbst Schuld. Soll er halt updaten.



  • Also ich finde diese Diskussion über C++11 ein wenig verwunderlich. Es gibt Situationen, da kann man nicht einfach so mal schnell updaten. Im professionellen Bereich ist es üblich, gut abgehangene Software zu verwenden. Und das sehr lange. Bis ich mal auf der Arbeit C++11 verwenden kann, wird wohl noch 2-3 Jahre vergehen.

    Bei uns wird der Compiler nicht einfach mal aktualisiert. Das geschieht nur, wenn die Hardware mal erneuert wird.

    Man denke auch mal an Red Hat Linux oder andere Linux Distributionen, die länger gewartet werden. Da wird auch noch Software entwickelt.



  • Der TE ist offensichtlich keinprofessioneller Softwareentwickler...



  • versuchs mal so:

    typename std::vector<int>::iterator it1 = vec1.begin();  // auto it1 = vec1.begin();
    typename std::vector<char>::iterator it2 = vec2.begin(); // auto it2 = vec2.begin();
    for (; it1 != vec1.end() && it2 != vec2.end(); ++it1, ++it2)
        std::cout << *it1 << ", " << *it2 << std::endl;
    

    Die Anforderung, dass es der gleiche Typ und die gleiche Größe sein muss ist
    Quatsch.

    Kellerautomat schrieb:

    Der TE ist offensichtlich keinprofessioneller Softwareentwickler...

    Kein Grund, trotzdem sollte man sowohl C++11 als auch C++03 zu kennen.



  • M10n schrieb:

    wenn man das nicht gewusst hat und immer ausgeschrieben hat fühlt das sich wie betrug an.

    Naja, so lange gibt's das auch nicht. Erst seit einem Jahr. 😉 Es ist ein C++2011 Feature.



  • Kellerautomat schrieb:

    Der TE ist offensichtlich keinprofessioneller Softwareentwickler...

    ne isser nicht. 😉
    allerdings bin ich trotzdem an die compiler gebunden die mir das rz auf den rechenknechten und lokal mein arbeitsrechner bietet. und das ist im einen fall ein mac mit 4.2.1 und sonst 4.4.5. deswegen geht auto bei dem problem nicht.
    aber trotzdem gut die ganzen leckeren neue(re)n features zu kennen.

    Cyres schrieb:

    Die Anforderung, dass es der gleiche Typ und die gleiche Größe sein muss ist
    Quatsch.

    danke , dachte ich mir und hab ich jetzt auch schon anders gemacht. ich kannte die syntax mit dem komma nicht.


Anmelden zum Antworten