Jak uzyskać maksymalną (lub minimalną) wartość w wektorze w C ++ ?
Widziałem kilka rozwiązań tego problemu w Google, ale żadne z nich nie miało dla mnie sensu :(
Czy ktoś może wyjaśnić w prosty i prosty sposób noob, jak uzyskać maksymalną lub minimalną wartość z wektora? i czy mylę się zakładając, że byłoby mniej więcej tak samo z tablicą?
Potrzebuję iteratora, prawda? Próbowałem, max_element
ale nadal wyświetlał się błąd?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
błąd: żądanie elementu „rozpoczyna się” w „chmurze”, które nie jest typu „int [10]”
EDYCJA: nie byłem w stanie odpowiedzieć na własne ??? więc wstawię to tutaj ...
Wow, dzięki za szybkie odpowiedzi! Skończyło się na tym, że zrobiłem to w ten sposób, czy myślisz, że to w porządku?
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
gdzie cdf
jest wektor.
cloud
to, że nie jest to kontener STL, ale raczej plikint[10]
. Zasadniczocloud
nie ma członka.begin()
. Może chcesz zdobyć podstawową książkę C ++, chyba że robisz tylko jedną rzecz.int[10]
”. Jak więc może to być wektor?Odpowiedzi:
Używając flag kompilacji c ++ 11 / c ++ 0x, możesz
W przeciwnym razie napisz własne:
Zobacz to na żywo na http://ideone.com/aDkhW :
Aha, i użyj,
std::minmax_element(...)
jeśli potrzebujesz obu naraz: /źródło
Jeśli chcesz korzystać z funkcji
std::max_element()
, musisz to zrobić:Mam nadzieję, że to pomoże.
źródło
*
w środku*max_element
?Pozwolić,
Jeśli wektor jest posortowany w porządku rosnącym lub malejącym, to można go znaleźć ze złożonością O (1).
Dla wektora w kolejności rosnącej pierwszy element jest najmniejszym elementem, można go uzyskać za pomocą v [0] (indeksowanie oparte na 0), a ostatni element jest największym elementem, można go uzyskać za pomocą v [sizeOfVector-1].
Jeśli wektor jest posortowany w kolejności malejącej, to ostatnim elementem jest najmniejszy element, można go uzyskać za pomocą v [sizeOfVector-1], a pierwszy element jest największym elementem, można go uzyskać za pomocą v [0].
Jeśli wektor nie jest posortowany, musisz iterować po wektorze, aby uzyskać najmniejszy / największy element. W tym przypadku złożoność czasowa wynosi O (n), tutaj n jest rozmiarem wektora.
Możesz użyć iteratora,
Możesz to obliczyć w sekcji wejściowej (gdy musisz znaleźć najmniejszy lub największy element z danego wektora)
Możesz również uzyskać najmniejszy / największy element dzięki wbudowanym funkcjom
Korzystając z tej funkcji, możesz uzyskać najmniejszy / największy element z dowolnego zakresu. Jak na przykład,
Użyłem gwiazdki (*) przed funkcjami min_element () / max_element (). Ponieważ obaj zwracają iterator. Wszystkie kody są w języku C ++.
źródło
min_element
imax_element
zwraca iterator , a nie wskaźnik. Jednak aby być technicznie poprawnym, wskaźnik jest podzbiorem iteratora. Zobacz: stackoverflow.com/questions/2728190/…Zakładając chmurę
int cloud[10]
, możesz to zrobić w ten sposób:int *p = max_element(cloud, cloud + 10);
źródło
Możesz go wydrukować bezpośrednio za pomocą funkcji max_element / min_element. Na przykład:
źródło
W C ++ 11 możesz użyć takiej funkcji:
źródło
std::max_element
ponieważ ...?Jeśli chcesz użyć iteratora, możesz zrobić miejsce-nowy z tablicą.
Zwróć uwagę na brak
()
na końcu, to ważne. Tworzy to klasę tablicową, która używa tej pamięci jako swojej pamięci i ma funkcje STL, takie jak iteratory.(Nawiasem mówiąc, to jest C ++ TR1 / C ++ 11)
źródło
Możesz użyć max_element, aby uzyskać maksymalną wartość w wektorze. Element max_element zwraca iterator do największej wartości w zakresie lub ostatniego, jeśli zakres jest pusty. Ponieważ iterator jest podobny do wskaźników (lub możesz powiedzieć, że wskaźnik jest formą iteratora), możesz użyć znaku * przed nim, aby uzyskać wartość. Więc zgodnie z problemem możesz uzyskać maksymalny element w wektorze jako:
To da ci maksymalny pierwiastek w twojej wektorowej "chmurze". Mam nadzieję, że to pomoże.
źródło
Tylko to:
źródło
int cloud[10];
i jest to użycie magicznych liczb.Absolutnie nooby ... w C.
źródło
vector
for
pętli. Ogólnie bardzo słaba odpowiedź.