Контейнеры STL: lista. parte 4




Lista C ++, C ++ lista, контейнеры C ++ STL , Standard Template Library, C ++ contenitore, Lista bidirezionale con ++Nella terza parte delle lezioni dei contenitori STL, abbiamo finito la revisione della vettori, diciamo, tipo vettore<galleggiante> come l'equivalente di una matrice di numeri reali. Per questi "array" molto rapidamente effettuato l'operazione per accedere all'elemento (lettura-scrittura) e l'organo di inserimento-rimozione indice alla fine vettore. molto peggio (sull'efficacia) operazione viene eseguita elemento a tassello rimozione qualche parte nel mezzo del vettore, o lo spostamento di un elemento da una posizione all'altra.

per esempio, dimensione del vettore 15 operazione per spostare l'elemento 10 in posizione 2 richiederà:

  • Ricordarsi di una variabile intermedia dell'elemento 10;

  • per tutto elementi dal 9 al 2 ° (in ordine inverso, possibilmente utilizzando l'iteratore invertito) copia la posizione successiva (8 operazioni di copia);

  • precedentemente salvato in un elemento variabile intermedia viene copiato nella posizione 2;

in totale, per questa semplice operazione ci sono voluti 10 operazioni di copia. Ciascun elemento del vettore, come abbiamo discusso in precedenza, Può essere difficile-fallimento struttura composita. E il suo fino - si tratta di un'operazione che richiede tempo.

per “collezioni”, in cui l'aggiunta di attivo previsto, rimozione e spostamento elementi, libreria STL offre un'altra vista del contenitore - lista doppiamente collegata, lista. Tale accesso agli elementi contenitori (lettura, record) serial, e non sono efficaci. Ma l'aggiunta di funzionamento, eliminare o modificare l'ordine delle voci è molto veloce.

iteratore lista iteratore non è un accesso diretto. Pertanto, per lui nonapplicare il funzionamento +, , +=, -=, e il contenitore nonoperazione ricevibile indicizzazione. Iteratori per questo contenitore vengono spostati operazioni sequenzialmente ++ e.

Per illustrare il lavoro con un tale contenitore, scriviamo tutti lo stesso problema di trovare tutti i numeri primi, non superiore a N (e confrontando per coerenza con precedenti realizzazioni):

Qui, la prima metà del codice (operatore << per una lista) Solo realizzazione decorativa di diagnostica e la convenienza, e il resto della seguente avviene:

  • creare una lista di lista<int> numeri naturali vanno [2…N] – linee 19 – 22;

  • per ogni (rimanente) il numero della lista successiva cancellato più elementi ad essa – fila 31;

  • E così fino ad allora, finché il numero successivo da testare non supera la radice quadrata di N – fila 26 (in numero mostra teoria, divisibilità che può essere controllato non N-1, e il numero di, maggiore della radice quadrata di N);

Tra le caratteristiche del codice, e lista container generalmente, è necessario prestare attenzione a ciò che, che dopo la rimozione dell'elemento, indica il valore attuale dell'iteratore, valore iteratore diventa incerta. Se vogliamo continuare a iterare, dobbiamo lavorare con una copia iteratore (io codice mostrato in).

Il codice viene eseguito, possiamo controllare, che i risultati esattamente simile alle versioni precedenti. Prima di avviare il programma, non dimenticare di definire i comandi uguali all'argomentazione 300, come abbiamo fatto nella precedente lezione.
Lista C ++, C ++ lista, контейнеры C ++ STL , Standard Template Library, C ++ contenitore, lista doppiamente collegata

Newsletter nuove lezioni sulla programmazione:

Контейнеры STL: lista. parte 4
Vota questo articolo

Di olio

esperienze pratiche circa lo sviluppo del software 40 anni. Maestro globale Logic società di software internazionale. IBM Developer funziona autore permanente di pubblicazioni. redattore scientifico del computer casa editrice letteratura "Simbolo-Plus", San Pietroburgo.

Lascia un Commento

L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *