Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] Utilizzare STL o no?

    Salve a tutti,
    avevo un problema che non so nemmeno se definirlo un problema!
    Praticamente devo implementare un algoritmo che, presa una lista di indirizzi IP (inseriti manualmente), effettui determinate azioni, con l'ausilio di altre classi, altre funzioni, ecc ecc..
    Bene!
    Il mio problema esistenziale è:
    Questa lista di indirizzi IP (che, alla fine, nient'altro sono che stringhe, giusto?) devo crearla attraverso l'utilizzo della STL list / vector, oppure devo creare un tipo struct/classe e creare una lista di oggetti "J" che, però, non sono eterogenei, in quanto il tipo è un tipo nativo di tipo, appunto, string!

    Grazie mille in anticipo!

    PS: non ho nessuno scopo didattico! Posso utilizzare *qualsiasi cosa*!

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Usa STL senza complicarti troppo la vita.
    Senza costrizioni/altre cause specifiche non ha senso ricreare la ruota.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Non ho mica capito la questione dei "tipi eterogenei"... un indirizzo IP (supponendo che tu ti riferisca ad IPv4) non è altro che un intero a 32 bit, la rappresentazione aaa.bbb.ccc.ddd è solo una rappresentazione di comodo per noi umani, lo puoi rappresentare in maniera comoda sia con un uint32_t, sia con un array di quattro unsigned char (uno per ogni byte) incapsulato in una struct (o volendo addirittura con una union dei due), sicuramente non con stringhe.
    Una volta che hai stabilito il tuo tipo per l'indirizzo IP puoi usare normalmente i container e gli algoritmi STL.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Originariamente inviato da MItaly
    Non ho mica capito la questione dei "tipi eterogenei"... un indirizzo IP (supponendo che tu ti riferisca ad IPv4) non è altro che un intero a 32 bit, la rappresentazione aaa.bbb.ccc.ddd è solo una rappresentazione di comodo per noi umani, lo puoi rappresentare in maniera comoda sia con un uint32_t, sia con un array di quattro unsigned char (uno per ogni byte) incapsulato in una struct (o volendo addirittura con una union dei due), sicuramente non con stringhe.
    Una volta che hai stabilito il tuo tipo per l'indirizzo IP puoi usare normalmente i container e gli algoritmi STL.
    Evidentemente quello che mi mancava era proprio la conoscenza di questo uint32_t.
    Trattavo la lista come una lista di stringhe e, per migliorare la leggibilità del codice, e la sua riservatezza, mi chiedevo se era necessario utilizzare classi e file header per creare questa lista.
    Grazie

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    uint32_t -> unsigned integer 32bit (typedef)

    Non ha niente di magico, semplicemente ti assicura di avere una lunghezza di 32 bit...

    Non so cosa tu debba fare precisamente, ma di certo l'utilizzo di stringhe non è economico dal punto dell'utilizzo di memoria e non migliora di certo la leggibilità del codice.

    Piuttosto potrebbe migliorare la leggibilità del codice una classe IP (o come la vuoi chiamare) che incapsula un intero uint32_t e espone funzioni per il pretty-printing/la-lettura-di-stringhe...

    Nella maggior parte dei casi, poi, è meglio utilizzare la STL. Solo in casi del tutto eccezionali è il caso di ricorrere ad un'implementazione ad-hoc (Esercizi scolastici esclusi).

    Questo è il mio parere.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Originariamente inviato da Scara95
    uint32_t -> unsigned integer 32bit (typedef)

    Non ha niente di magico, semplicemente ti assicura di avere una lunghezza di 32 bit...

    Non so cosa tu debba fare precisamente, ma di certo l'utilizzo di stringhe non è economico dal punto dell'utilizzo di memoria e non migliora di certo la leggibilità del codice.

    Piuttosto potrebbe migliorare la leggibilità del codice una classe IP (o come la vuoi chiamare) che incapsula un intero uint32_t e espone funzioni per il pretty-printing/la-lettura-di-stringhe...

    Nella maggior parte dei casi, poi, è meglio utilizzare la STL. Solo in casi del tutto eccezionali è il caso di ricorrere ad un'implementazione ad-hoc (Esercizi scolastici esclusi).

    Questo è il mio parere.
    Grazie per il tuo parere, mi è utilissimo.
    Sopratutto in merito a

    Piuttosto potrebbe migliorare la leggibilità del codice una classe IP (o come la vuoi chiamare) che incapsula un intero uint32_t e espone funzioni per il pretty-printing/la-lettura-di-stringhe
    Se creo una classe IP, che incapsula quest'intero uint32_t, e fornisco tutte le funzioni membro necessarie per andare a leggere & scrivere questo mio fantomatico indirizzo IP, successivamente dovrei creare una lista di oggetti di tipo IP, no? (utilizzando la STL)
    Che è completamente diverso da una lista di tipo uint32_t, le cui funzioni (push_back, erase, ecc) devono necessariamente comparire nel main, giusto?

    Io voglio-devo creare un codice che sia stilisticamente "perfetto", "riusabile", e "sicuro" (ovvero con i vari .h, .cpp, ecc).
    Quale soluzione mi conviene adottare, delle due?
    Lista di oggetti di tipo IP o lista di tipo uint32?
    Grazie!

  7. #7
    Originariamente inviato da Gallagher
    Se creo una classe IP, che incapsula quest'intero uint32_t, e fornisco tutte le funzioni membro necessarie per andare a leggere & scrivere questo mio fantomatico indirizzo IP, successivamente dovrei creare una lista di oggetti di tipo IP, no? (utilizzando la STL)
    Certo.
    le cui funzioni (push_back, erase, ecc) devono necessariamente comparire nel main, giusto?
    No, perché? Le usi quando, dove e se ti servono, non necessariamente nel main e non necessariamente tutte.
    Lista di oggetti di tipo IP o lista di tipo uint32?
    Sicuramente meglio la lista di oggetti di tipo IP. un uint32_t può essere qualunque roba (e richiede funzioni esterne per essere manipolato "come se fosse un IP"), se invece usi una classe ad-hoc puoi aggiungerle i metodi che preferisci oltre a rendere subito chiaro che si tratta di un IP e non di un qualunque numero intero a 32 bit.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Sicuramente meglio la lista di oggetti di tipo IP. un uint32_t può essere qualunque roba (e richiede funzioni esterne per essere manipolato "come se fosse un IP"), se invece usi una classe ad-hoc puoi aggiungerle i metodi che preferisci oltre a rendere subito chiaro che si tratta di un IP e non di un qualunque numero intero a 32 bit.
    Grazie mille per i preziosi consigli, ad entrambi!

  9. #9
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.