Új hozzászólás Aktív témák

  • PandaMonium

    őstag

    válasz m.zmrzlina #3905 üzenetére

    Ettől általánosabb ha ahogy javasolták is, funktorokat használsz.

    bool novekvo(float elso, float masodik)
    {
    return elso < masodik;
    }

    int cseres(float tomb[],int meret, const std::function<bool(float, float)>& feltetel)
    {
    float temp=0;
    for (int i=0;i<meret-1;i++)
    {
    for (int j=i+1;j<meret;j++)
    {
    if(feltetel(tomb[j], tomb[i]))
    {
    temp=tomb[i];
    tomb[i]=tomb[j];
    tomb[j]=temp;
    }
    }
    }
    return 0;
    }

    Itt a cseres függvény harmadik paramétere egy olyan funktor ami bool visszatérési értékű, és két float paramétert fogad. Ilyen pl. a novekvo függvény ami felette van definiálva. Tehát az a függvény hívás, hogy

    cseres(tombom, tombom_merete, novekvo);

    teljesen valid.

    Pár megjegyzés még, mert írtad, hogy most tanulod a nyelvet:

    - C stílusú (float[], int[], stb.) tömböket ne használj, akkor sem ha ezt látod tutorialokban vagy ezt oktatják egyetemen. Modern C++ban ha folytonosan szeretnénk tárolni valamit a memóriában (ahogy a tömb is semmi más mint egy folytonosan allokált memóriaterület) és fordítás időben (azaz a program írásakor, nem futtatáskor) tudjuk mekkora tömb kell nekünk akkor std::array-t használunk, egyébként, ha dinamikus méretű tömbre van szükségünk akkor std::vector -t.

    - Jelenleg a kódod csak egy adott típusú tömbre (float) fog működni. Ha template függvényt csinálsz belőle kirakhatod ezt a típust template paraméterbe és akármilyen típusra fog működni - itt persze feltétel lesz, hogy a funktor is ennek a típusnak két példányát fogja fogadni.

    - Nincsen kőbe vésve, de konvenció, hogy ha egy konténer két elemét hasonlítjuk össze akkor az az elem kerül az összehasonlítás bal oldalára ami előrébb van a konténerben. Ennek egy logikai összehasonlításkor nincs sok jelentősége, mert legfeljebb megfordítod az operátort ((a > b) == (b < a)), de pl. ha funktoroknak adod át a paramétereket akkor fontos, hogy a funktor milyen sorrendben várja az elemeket.

Új hozzászólás Aktív témák