Witam.
Mam takie zadanie z motywem definiowania funkcji szablonowej oraz kontenerem "list".
Zamieszczam treść.
Napisz szablon funkcji, która przyjmuje w argumencie stałą referencję na obiekt kontenera listy z biblioteki standardowej C++. Zakładamy, że lista zawiera wartości liczbowe. Funkcja powinna zwrócić (w postaci liczby naturalnej) pozycję (indeksując od 0) elementu o wartości największej (przy pustej liście - wartość -1).
Próbowałem robić zadanie - na różne sposoby, i nijak nie wychodzi! Ciągle gdzieś coś się nie chce kompilować - choć logicznie wydaje się, że powinno być dobrze. Używam Dev-C++, ale to chyba nie ma znaczenia. Nie jestem jakiś zielony z programowania, również obiektowego, tylko nie jestem oblatany w szablonach.
Jeśli ktoś jest w tym obeznany i może pomóc, prosiłbym o wskazanie/poprawienie błędów - tak, by kompilowała się funkcja, wraz z całym programem ją testującym (czasem funkcja potrafi się skompilować, a błąd wyjść dopiero przy jej wywołaniu).
Zamieszczam kod napisanego przeze mnie programu (w pierwotnej wersji). Tutaj (kompletnie nie rozumiem dlaczego) błąd kompilacji powodują deklaracje iteratorów - na początku funkcji.
#include <iostream>
#include <cstdlib>
#include <string>
#include <cmath>
#include <list>
using namespace std;
template <typename T>
int MaxWLiscie(const list<T> &lista)
{
list<T>::iterator itMax; //iterator na element największy
list<T>::iterator it;
if (lista.empty())
return -1;
itMax = lista.begin();
it = lista.begin()+1;
while (it != lista.end())
{
if (*it > *itMax)
itMax = it;
it++;
}
return *itMax;
}
int main()
{
list<double> Lista;
Lista.push_back(10);
Lista.push_back(5);
Lista.push_back(14);
Lista.push_back(2);
MaxWLiscie<double>(Lista);
cout << endl;
system("PAUSE >NUL");
return 0;
}
Pozdrawiam i liczę na pomoc. :)