Keresés

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

  • dobragab

    addikt

    válasz ToMmY_hun #3223 üzenetére

    Jó irányba tapogatózol, a template a megoldás. Amit te keresel, az az std::vector. Mindent tud, ami neked valaha kelleni fog dinamikus tömb szintjén. Egyrészt tud automatikusan megnyúlni (push_back), viszont előre is le tudja foglalni a memóriát, és nem kell nyújtózkodnia, ha konstruktorparaméterként adod neki a darabszámot, vagy reserve-ölsz. Természetesen ezután is tud megnyúlni.

    Túl jávásan gondolkozol. Egyrészt teljesen felesleges nekik ősosztály, anélkül is lehet különböző típusokat megetetni egy generikus algoritmussal: erre való a template. Másrészt a get helyett C++-ban illik indexelő operátort használni.

    std::vector<int> vec(100); // 100 darab helyet lefoglal előre,
    // de nem tölti fel, egy darab int sem kerül bele
    vec.push_back(1); // belekerült az első elem

    for(int i = 0; i < vec.size(); ++i)
    std::cout << vec[i];

    Egy generikus algoritmus lényege a duck typing: minden, ami úszik, és hápog, az kacsa. Másképp: az alábbi algoritmus bármilyen típust tartalmazó vector-ral működni tud, aminek van rendes (std::ostream-et visszaadó) << operátora. Ha te ezt meghívod std::vector<int>-ekre, akkor a fordító fordítási időben legenerálja neked a print<int>-et, mert az int úszik és hápog (van << operátora).

    template<typename T>
    void print(std::vector<T> const& vec)
    {
    std::cout << vec(i) << ' ';
    }

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