• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak zrobić taką specjalizację do szablonu funkcji?

Object Storage Arubacloud
0 głosów
508 wizyt
pytanie zadane 12 lutego 2016 w C i C++ przez k222 Nałogowiec (30,150 p.)

Mam takie zadanko żeby napisać szablon funkcji zwracający największy element tablicy gdzie podaje się tablicę i jej wielkość. Z tym akurat sobie poradziłem ale jeszcze trzeba dorobić specjalizację przyjmującą jako parametr tablicę typu char i zwracającą adres najdłuższego napisu (pierwszego jeśli jest kilka tak samo długich) i włąśnie za ten szablon nie wiem jak się zabrać. Tutaj jest to co sam zrobiłem :

#include <iostream>

using namespace std;

template<typename T>
T maxn(T tab[], int n)
{
    T a;
    a = tab[0];
    for(int i = 0; i < n; i++)
    {
        if(tab[i] > a)
        a = tab[i];
    }
    return a;
}

/* template <> char* maxn<char*>(char *tab[], int n)
{
int j=0, m = 0, p =0;
for(int i = 0; i < n; i++)
{
    while(tab[i][j] != '\0')
    {
        j++;
    }
    if(j > m)
    {m = j;
    p = i;}
    return tab[p];
}

}*/
int main()
{
    int ti[5] = {1,5,6,3,5}, w1;
    double td[4] = {23.635, 12.342, 1.4, 22.5634}, w2;
    /*char *tc[6] = {"Ala ma kota","Ala ma psa","ala ma kotela","Srijayawardanapurakotte", "NIc","Krotkie"}, k;*/
    w1 = maxn(ti,5);
    w2 = maxn(td,4);
    //k = maxn(tc, 6);
    cout<<w1<<"   "<<w2;//<<"   "<<k;
    return 0;
}

Jako komentarz wzięta jest ta część ze specjalizacją która nie działa. Czy mógłby ktoś to poprawić lub dać mi jakąś wskazówkę jak to pozmieniać żeby chodziło?

3 odpowiedzi

0 głosów
odpowiedź 12 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)

A po co ci szablon funkcji, jeśli wiesz, że będziesz pracować na danych typu char?

komentarz 12 lutego 2016 przez k222 Nałogowiec (30,150 p.)
Takie ćwiczonko żeby zrobić i zrozumieć jak to zrobić tak na zaś
0 głosów
odpowiedź 12 lutego 2016 przez MetGang Nałogowiec (34,360 p.)

Teoretycznie:

template<> char maxn(char tab[], int n)

 

0 głosów
odpowiedź 13 maja 2016 przez Piotr Batko Stary wyjadacz (13,190 p.)

Funkcja specjalizowana to taka funkcja, której nagłówek mógłby zostać wygenerowany przez szablon. U Ciebie nagłówek szablonu wygląda tak:

template<typename T>
T maxn(T tab[], int n)

Więc dla T równego const char* otrzymalibyśmy funkcję o takim oto nagłówku:

const char* maxn(const char* tab[], int n)

Chcąc napisać funkcję specjalizowaną piszesz po prostu funkcję o takim nagłówku (bez żadnych "template").


Przykładowe rozwiązanie Twojego problemu:

const char* maxn(const char* napisy[], int iloscStringow)
{
	if (iloscStringow > 0)
	{
		string najdluzszy = napisy[0];
		int indeksNajdluzszego = 0;

		for (int i = 1; i < iloscStringow; i++)
		{
			string obecnieTestowany = napisy[i];
			if (najdluzszy.length() < obecnieTestowany.length())
			{
				najdluzszy = obecnieTestowany;
				indeksNajdluzszego = i;
			}
		}

		return napisy[indeksNajdluzszego];
	}
	else
	{
		return 0;
	}
}

Podmień jeszcze char* na const char* w linijce:

char *tc[6] = {"Ala ma kota","Ala ma psa","ala ma kotela","Srijayawardanapurakotte", "NIc","Krotkie"}, k;

Te C-Stringi którymi sobie inicjalizujesz tablicę są stałymi dosłownymi. Dodatkowo w tej samej linijce zdefiniowałeś sobie k jako znak, a nie wskaźnik na znaki. Powinno być oczywiście *k.


Pozdrawiam i powodzenia! :)

Podobne pytania

+1 głos
2 odpowiedzi 321 wizyt
pytanie zadane 14 września 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)
0 głosów
1 odpowiedź 890 wizyt
0 głosów
2 odpowiedzi 154 wizyt
pytanie zadane 14 lutego 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...