const vector will nicht



  • Mir ist folgende Aufgabe gegeben: Implementieren sie den Funtionsrumpf für die Funktion

    template<class T> T min(const vector<T>& vec) { /*...*/ }
    

    und das hab' ich auch:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    template<class T> T min(const vector<T>& vec) {
        vector<T>::iterator iter=vec.begin()+1;
        vector<T>::iterator such_wert=vec.begin();
    
        for(;iter!=vec.end();++iter)
    	if(*such_wert>*iter) such_wert=iter;
    
        return *such_wert;
    }
    
    int main(void)
    {
        int a[5]={4,8,2,34,11};
        vector<int> v(a,a+5);
    
        cout<<min(v);
    
        return 0;
    }
    

    Nun funtioniert die
    Funktion deshalb nicht, weil im Funktionskopf der Vector als const übernommen wird und der Compiler mit den Fehlern für die Zeilen meckert:

    vector<T>::iterator iter=vec.begin()+1; // 'const int*' kann nicht nach 'int*' konventiert werden
    vector<T>::iterator such_wert=vec.begin(); //dito
    

    Wenn vector<T>& vec im Funktionskopf nicht konstant ist, läuft alles perfekt, dass ist aber nicht im Sinne der Aufgabe und vec soll auch sonst nicht im
    Rumpf irgendwie geändert werden.

    Was kann ich noch tun bzw. was wäre die beste Lösung?



  • const_iterator statt iterator verwenden.



  • Danke.



  • Hallo,
    also erstmal fehlen da zwei typenames. Außerdem musst du const_iteratoren verwenden. Sprich:

    template<class T> T min(const vector<T>& vec) { 
        typename vector<T>::const_iterator iter=vec.begin()+1; 
        typename vector<T>::const_iterator such_wert=vec.begin(); 
    
        for(;iter!=vec.end();++iter) 
        if(*such_wert>*iter) such_wert=iter; 
    
        return *such_wert; 
    }
    

    Einfach ist natürlich std::min_element

    cout <<  *min_element(vec.begin(), vec.end());
    

Anmelden zum Antworten