Ottimizzare C++/Tecniche generali di ottimizzazione/Altre tecniche: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
RamaccoloBot (discussione | contributi)
Riportate modifiche da en.wikibooks
 
Riga 1:
{{Ottimizzare C++}}
 
=== Lettere maiuscole e minuscole ===
 
'''Prima di confrontare una stringa con una serie di altre stringhe, trasforma tutte le stringhe in lettere maiuscole (o in minuscole), ed esegui il confronto distinguendo tra minuscole e maiuscole (''case-sensitive'').'''
 
Il confronto ''case-insensitive'' tra stringhe richiede più tempo del confronto ''case-sensitive''.
 
=== Query con cursore ===
Line 22 ⟶ 16:
 
Ecco una tecnica equivalente ma più efficiente.
 
La funzione di interrogazione rende un iteratore.
Nel mondo dei database, tale iteratore si chiama ''cursore'' o ''dynaset''.
Il chiamante usa tale iteratore per estrarre, uno alla volta i dati filtrati, ed eventualmente per modificare tali dati.
 
Nota che questa soluzione non è del tutto equivalente, in quanto se durante l'uso dell'iteratore la collezione viene modificata da un'altra chiamata di funzione, eventualmente proveniente da un altro thread, può succedere che l'iteratore sia invalidato, o anche solo che l'insieme filtrato non corrisponda ai criteri impostati.
Line 47 ⟶ 42:
=== Lista a collegamento singolo ===
 
'''Se per una lista tinon bastahai usarebisogno l'iteratoredi initeratori avantibidirezionali, non devi inserire gli elementi solo all'inizioalla fine o dopoprima ldell'elemento corrente, e non ti serve sapere quanti elementi ci sono nella lista, usa una [[w:Lista_concatenata#Liste_semplicemente_concatenate|lista a collegamentoconcatenamento singolo]], invece di una [[w:Lista_concatenata#Liste_doppiamente_concatenate|lista a concatenamento doppio]].'''
 
Tale contenitore, pur avendo molte limitazioni, occupa meno memoria ed è più veloce.
 
Infatti, tipicamente, l'intestazione di una lista a collegamentoconcatenamento doppio contiene un puntatore alla cima, un puntatore al fondo della lista, e il contatore del numero di elementi, mentre l'intestazione di una lista a collegamentoconcatenamento singolo contiene solo un puntatore alla cima della lista.
Inoltre, tipicamente, ogni nodo di una lista a collegamentoconcatenamento doppio contiene un puntatore all'elemento precedente e un puntatore all'elemento successivo, mentre ogni nodo di una lista a collegamentoconcatenamento singolo contiene solo un puntatore all'elemento successivo.
Infine, ogni inserimento di un elemento in una lista a collegamentoconcatenamento doppio deve aggiornare quattro puntatori e incrementare un contatore, mentre ogni inserimento in una lista a collegamentoconcatenamento singolo deve solo aggiornare due puntatori.
 
Nella libreria standard del C++, il contenitore <code>std::list</code> è implementato da una [[w:Lista_concatenata#Liste_doppiamente_concatenate|lista a collegamentoconcatenamento doppio]].
Il contenitore <code>slist</code>, non standard ma disponibile in varie librerie, e il contenitore <code>forward_list</code>, che farà parte della libreria standard C++0x, sono implementati da una lista a collegamentoconcatenamento singolo.
 
[[Categoria:Ottimizzare C++|Altre tecniche]]