Ahoj, Potřebuju aby argumentem funkce bylo pole čísel a ta funkce by měla pomocí cyklu zjistit nejvyšší z těch 5 čísel obsažených v poly které jí předám. Jak na to v c++? Má to ovšem háček, funkce má být šablonová ...
Fórum › C / C++
Hledání nejvyšší
int pole[20];
//...
std::cout << "max: " << *std::max_element(pole, pole+20);
//alebo://...
std::cout << "max: " << *std::max_element(std::begin(pole), std::end(pole));
Na tej stanke mas priklad ako moze vyzerat ta implementacia. Tu mas trochu upavenu verziu:
template<class T>
T* max_element(T* first, T* last)
{
if (first == last) {
return last;
}
T* largest = first;
++first;
for (; first != last; ++first) {
if (*largest < *first) {
largest = first;
}
}
return largest;
}
nebo to můžeš udělat klasicky jen přes velikost pole.. sice ten iterator je lepší, jak uvedl vitamin, páč nemusíš předem zjištovat velikost pole, jen mu zadáš 2 ukazatele na prvky (od-do), ale tohle ti bude asi známější:
template<class T>
int maxNumber(T* arr, const int size) {
T max = *arr;
for (int i = 0; i < size; ++i) {
if (*(arr + i) > max)
max = *(arr + i);
}
return max;
}
int main ()
{
int pole[5] = { 5,4,7,3,6 };
std::cout << maxNumber(pole, 5); // 7
return EXIT_SUCCESS;
}
/*
* Najde maximum v neprazdnom poly
* Velkost pola musy byt znama pri preklade
* Vracia referenciu na maximum
*/
template <typename T, size_t S>
T& max_element(T (&pole)[S]){
static_assert(S>0, "chyba: pole ma 0 velkost");
//....
}
/*
* Najde maximum v neprazdnom poly
* Velkost pola nemusy byt znama pri preklade
* Vracia referenciu na maximum
*/
template <typename T>
T& max_element(T* pole, size_t s){
assert(s>0 && "chyba: pole ma 0 velkost");
//....
}
/*
* Najde maximum z intervalu <begin, end) //end sa nebere ako prvok pola
* Velkost pola nemusi byt znama pri preklade a pole moze byt prazdne.
* Kedze su ako parameter pointre na prvky pola, tak sa da velkost vypocitat ako ((end-begin)/sizeof(T)))
* Vracia pointer na maximum, ak sa nenajde maximum(pole je prazdne) tak vrati end
*/
template <typename T>
T* max_element(T* begin, T* end){
//....
}
/*
* Skoro to iste ako 3. priklad, ale pracuje pre vecsinu kontainerov.
* Kludne to moze byt list(zretzeny zoznam), mapa, stack, ...
*/
template <typename Iterator>
Iterator max_element(Iterator begin, Iterator end){
//....
}
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 63 hostů
Podobná vlákna
Hledání nejvyšší hodnoty součinu kombinace prvků dvojrozměrného pole — založil bobek11
Nejvyšší bity v poli — založil Pajda
Nejvyšší hodnoty ze seznamu proměnných — založil Pavel
Musím určit, jaká hodnota je nejvyšší... — založil Montezo
Jak seřadit pole od nejvyšší hodnoty k nejnižší? — založil yaqwsx
Moderátoři diskuze