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());