Coder Social home page Coder Social logo

unordered-set's Introduction

Introduzione

Il progetto richiedeva l’implementazione di una classe che implementi un set, cioè una collezione di dati che non ammette duplicati, di elementi generici T.

Scelte implementative e di design importanti

Visto che era necessario implementare una collezione di dati che non ammette duplicati, oltre a templare la classe sul tipo dell’elemento T, ho anche aggiunto un template Equal che si occupa di gestire l’uguaglianza fra gli elementi del set, permettendomi di controllare se due elementi sono uguali.
Per l’implementazione ho deciso di utilizzare un array dinamico chiamato _array per contenere gli elementi del set, visto che era richiesto di non usare le liste.
Per cercare di rendere più efficiente la gestione della memoria di questo array dinamico, ed evitare troppe copie quando viene ridimensionato, ho deciso di utilizzare una politica di ridimensionamento simile ad altre implementazioni dove viene usato l’array dinamico. Aumentando la dimensione dell’array di 2 quando viene aggiunto un elemento e l’array è pieno (in altre implementazioni viene usato 1.5 perché in molti casi più efficiente però ho deciso comunque di tenere 2) e diminuire la dimensione di 1/4 quando viene rimosso un elemento e si è arrivati a metà o meno della capacità, oltre a questo ho deciso di mettere un limite di 200 a quanto viene aumentata la capacità dell’array dinamico per evitare di aumentare troppo la dimensione.
Per gestire questo array dinamico ho utilizzato altre due variabili, _capacity per indicare la dimensione effettiva dell’array dinamico e _size per indicare il numero degli elementi dentro l’array e quindi del set.
Per ridimensionare l’array dinamico uso un metodo di supporto nascosto dall’interfaccia pubblica chiamato resize, metodo che si occupa di gestire il ridimensionamento dell’array dinamico.
Per i metodi da implementare ho deciso di mettere come valore di ritorno per i metodi add/remove un booleano questo perché è possibile che l’add non inserisca l’elemento quando è già presente e nella remove non viene rimosso un elemento che non esiste nel set.
Infine, ho implementato il const_iterator mediante i puntatori questo perché la classe set internamente viene implementata con un array dinamico e l’accesso ai dati è di tipo random perché implementiamo l’operatore [ ] costante.

unordered-set's People

Contributors

koalas11 avatar

Stargazers

Fraaaaaa4 avatar Theofilia Jessica avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.