Adattatori. STL (parte 15)




pila, programmazione per i principianti

Una categoria a parte di libreria di modelli standard sono adattatori. Adattatori - questo non è un concetto nuovo o di implementazione, e l'adattamento dei concetti esistenti biblioteca per specifiche, obiettivo comunemente usato. Spesso questo viene fatto attraverso l'adattamento restrizioni la funzionalità dei concetti di base per le richieste adattatore. La biblioteca presenta l'adattatore container, iteratori e funzioni.

Il modo più semplice per mostrare, entrambi sembrano adattatori esempio contenitori adattatori: pila (pila), fare la coda (turno), priority_queue (coda di priorità). Già è chiaro dai loro elenchi, che:

  • È ampiamente e comunemente usato strutture dati;

  • Non hanno bisogno di qualsiasi implementazione separata. Per garantire la loro funzionalità può essere utilizzata (adattare) come base di qualsiasi da contenitori standard STL, che fornisce operazioni come respingere, pop_indietro o pop_front (a seconda del tipo di adattatore);

  • L'operazione "extra" nell'arsenale del contenitore di base dovrebbe essere escluso adattatore (non creare tali tentazioni ..., operazione di indicizzazione, se il vettore è usato per adattare lo stack);

e, invece di definizioni ingombranti sintassi del modello (file header <pila>, <fare la coda> e t. n.), Fare riferimento all'esempio…

Partiamo dalla pila: caratterizzato pila, che l'accesso suoi elementi può essere solo da un'estremità, chiamato cima alla pila. Questa è una raccolta di dati, funzionante sul principio LIFO (Ultimo ad entrare, primo ad uscire). Ecco un semplice esempio rivela poco tutto funzionalità pila:

Analizziamo il codice e fare alcune conclusioni:

  • prima definizione pila<corda> (non usiamo su) dichiara una pila variabile, i cui elementi sono stringhe. Si prega di notare, che oggetti stringa sono essi stessi contenitori STL. così, stack può contenere elementi di eventuali contenitori di nidificazione (che è caratteristica di, e altri contenitori STL).

  • questa definizione ( pila<corda> ) si può vedere, una descrizione pila nella maggioranza degli esempi. Molti autori sono a conoscenza, che possono variare. Ma useremo una definizione diversa: pila< corda, vettore<corda> > - Una pila di stringhe (sostanzialmente equivalente alla precedente), ma costruito sul vettore classe di base<corda>. Come base può essere utilizzata, per esempio, vettore, lista e e, o anche la propria classe contenitore, base di espansione. per impostazione predefinita, (dal 1 ° determinante) Base deque usato. A volte le persone chiedono: perché non scrivere (definita come nella implementazione dello stack): pila< vettore<corda> > (rimozione di stringa duplicato)? perché (ed è molto probabile) Questa descrizione è un tipo completamente diverso: pila vettori tempo (vedere. sopra osservazione sui contenitori di nidificazione strutturali).

  • poi segue inizializzazione vettore di stato iniziale di stringhe. contrassegno, che tale trucco è valida solo in C ++ standard di 11.

  • Successivo vediamo quasi tutto operazioni (metodi), richiesto dalla pila: spingi() – spinta di un oggetto in pila, superiore() – ottenere un riferimento a un elemento in cima alla pila, pop() – espulsione dell'elemento superiore, dimensione() – la dimensione attuale della pila, vuoto() – sul controllo vuoto.

  • È facile capire, adattatore pila perso inerente base metodi di container (a(), [ ] et al.), ma acquisito (ridefinizione) proprio (spingi(), pop()).

Ora vediamo che cosa è venuto di esso:

pila, programmazione per i principianti

Dopo aver affrontato con una pila di elementari Ora basta spostare l'analogia a tutti. In contrasto impilare – è una raccolta di dati, funzionante secondo il principio FIFO (Il primo che entra è il primo ad uscire). (E 'un "pipe", una estremità del quale scorre qualcosa, e poi dall'altra estremità segue.)

Il congedo straordinario per esempio la coda è quasi invariato, la preparazione di cambiamenti, semantica del linguaggio richieste:

Da noi il cambiamento richiesto:

  • La linea non può essere costruito sul contenitore di base vettoriale che non ha un metodo pop_front(), ma può essere basato sulla lista, e, o qualsiasi altro contenitore, implementa un set di base di metodi (davanti(), respingere(), pop_front()), per impostazione predefinita, e.

  • Non vi è alcun top adattatore coda di metodo(), e un metodo simile front import().

E come risultato otteniamo (confrontare i risultati per lo stack!):

pila, programmazione per i principianti

Newsletter nuove lezioni sulla programmazione:

Adattatori. STL (parte 15)
2.5 (50%) 2 voti

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 *