krótsze algo do znajdywania

0

http://ideone.com/RJZb4
potrzebuję jakiś krótszy algorytm w c++. program ma znaleźć nawiększą liczbe spośród wprowadzonych liczb.

0

std::max_element zwraca wskaźnik do największego elementu w zbiorze. Jako argumenty podajesz początek i koniec zbioru, w przypadku tablicy początek to po prostu jej nazwa, a ostatni to nazwa + ilość_elementów.

0

Dzięki @Rev o to mi chodziło teraz mam krótszy kod o parę linijek :)

0
template <class ForwardIterator>
  ForwardIterator max_element ( ForwardIterator first, ForwardIterator last )
{
  ForwardIterator largest = first;
  if (first==last) return last;
  while (++first!=last)
    if (*largest<*first)
      largest=first;
  return largest;
}

Mógłby ktoś mi objaśnić o co chodzi w każdej linii? Nie bardzo wiem dleczego w warunku if first jest porównywane z last i jeśli będzie równy pierwszy i ostatni element to zwróci ostatni? Np. 1, 2, 1 - to według tego warunku powinno zwrócić 1, ale max element to 2.

0

Rozumiem wskaźniki, ale nie rozumiem tego zdania..

, a last do pierwszego elementu za ostatnim.

0

Przykładowo dla tablicy int tab[3]={1,2,3} tab jest początkiem (first), a tab+3 końcem (last). Samo tab+3 wskazuje na element za tablicą. Gdybyś iterował po C stringu, używając tego idiomu mógłbyś pominąć podawanie wskaźnika last, wystarczyłoby testowanie czy wartość na danym miejscu jest równa '\0'.

0

okay, teraz czaję.

  template <class ForwardIterator>
ForwardIterator max_element ( ForwardIterator first, ForwardIterator last )
{
  ForwardIterator largest = first;
  if (first==last) return last;
  while (++first!=last)
    if (largest<first)
      largest=first;
  return largest;
}

W orginalu w drugim warunku jest if (*largest<*first), właściwie zastanawiam się, czy poprawny jest zapis if (largest<first)? Wydaje mi się, że tak bo sprawdzamy adresy pod którymi znajdują się zmienne. Proszę o opinie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1