Hledání nejvyšší – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hledání nejvyšší – C / C++ – Fórum – Programujte.comHledání nejvyšší – C / C++ – Fórum – Programujte.com

 

Alex
~ Anonymní uživatel
65 příspěvků
22. 2. 2013   #1
-
0
-

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á ...

Nahlásit jako SPAM
IP: 95.143.132.–
vitamin+8
Grafoman
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Alex
~ Anonymní uživatel
65 příspěvků
22. 2. 2013   #3
-
0
-

a jak konkrétně tento příklad? nějak na to přijít nemohu

Nahlásit jako SPAM
IP: 95.143.132.–
vitamin+8
Grafoman
22. 2. 2013   #4
-
0
-

   

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;
}
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
ingiraxo+15
Grafoman
23. 2. 2013   #5
-
0
-

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;
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
vitamin+8
Grafoman
23. 2. 2013   #6
-
0
-

   


/*
 * 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){
	//....
}
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Alex
~ Anonymní uživatel
65 příspěvků
23. 2. 2013   #7
-
0
-

Chlapy ale tu funkci na zjištění nejvyšší mám vymyslet já :-) to je to oč tu běží. Nemam použít hotovou ale vymyslet svou :-)

Nahlásit jako SPAM
IP: 95.143.132.–
cibule0
Návštěvník
23. 2. 2013   #8
-
0
-

#7 Alex
Nač vymýšlet znovu kolo :-)

Nahlásit jako SPAM
IP: 85.70.207.–
ingiraxo+15
Grafoman
23. 2. 2013   #9
-
0
-

#7 Alex
však to jsem ti psal já, nemám tam použitýho nic ;)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Alex
~ Anonymní uživatel
65 příspěvků
23. 2. 2013   #10
-
0
-

#9 ingiraxo
promin, přehlédl jsem tvou odpověď-
Díky moc

Nahlásit jako SPAM
IP: 95.143.132.–
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žit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý