algoritmi. STL (parte 10)

algoritmi. STL (parte 10)
Vota questo articolo




dimensione алгоритмы, trova(), copia(), copy_if(), mossa(), swap_ranges(), remove_copy(), remove_copy_if(), fondere(), set_intersection(), set_difference()contenitori STL sarebbe una bella finzione abbastanza lontano da un uso pratico (come lo era nei primi anni di esistenza di STL), se non il fatto seguente: a causa del singolo generale natura del contenitore algoritmi di base, di interesse in pratica, Può essere implementato in una forma generalizzata, applicabile a qualsiasi tipi di contenitori. Algoritmi - è la massa e la parte più richiesto della biblioteca. Previsti tanti algoritmi, che per una descrizione dettagliata di tutti loro e non abbastanza book bulk. Di seguito completamente condizionatamente Noi li dividiamo in gruppi e chiamare per nome (e anche non tutti), e solo per alcuni casi di utilizzo costruire.

per ciascuno() L'algoritmo più comunemente usato - è per ciascuno(): implementazione delle azioni per i gruppi di elementi (possono tutti) contenitore. Di seguito mostra alcuni esempi di dell'algoritmo per ciascuno() per un array e vettoriale, analogamente, questo algoritmo può essere utilizzato con qualsiasi контейнером STL:

dimensione алгоритмы, trova(), contare(), count_if(), ricerca(), binary_search(), min(), max(), minmax_element(), min_element(), max_element(), pari()

nota: linee 3 Essa mostra il funzionamento della nuova (introdotto standard C ++ 11) progetto per( auto &X : …), che ha un'assegnazione effetto simile e può essere applicato a matrici e contenitori (in-operatore di output funzione vettoriale del flusso mostrata una tale opzione). Questa costruzione, in generale, Non fa parte di una raccolta o algoritmi STL, ma ha lo stesso effetto, che for_each algoritmo(): applicare in modo coerente a tutti gli elementi della collezione.

Questo esempio mostra l'organizzazione di base della logica tutto algoritmi: un intervallo specificato (non necessariamente per l'intera collezione), limitata inizio e la fine iteratore (spesso indica le prime 2 opzioni) applicata alternativamente funzionare, funtore, o predicato (funzione, restituisce un risultato logixchesky, consentendo la selezione di qualsiasi natura).

trova() Successivo algoritmo di significato - è trova(). Come nome intuitivo, una ricerca di un elemento nella raccolta. Si prega di notare, molti contenitori hanno metodo trova(), che è un oggetto di essere chiamato come obj.find(…), mentre algoritmo Si chiamerà come trova( obj:iteator, ... ).

propriamente, non è uno, questo algoritmo, ma un intero gruppo di loro vasto, che possono essere combinati in base, ciò che selezionato elementi di una raccolta su alcuni motivi, condizione, predicato: trova(), find_if(), find_if_not(), find_first_of(), find_end(), adjacent_find(). Nello stesso gruppo, con qualche tratto, può essere attribuito contare(), count_if(), ricerca(), binary_search(), min(), max(), minmax_element(), min_element(), max_element(), pari() et al.

Un altro gruppo convenzionale - algoritmi, in qualche modo collezione "tasuyuschie", permute elementi posti, la modifica dei valori: riempire(), replace_copy(), inverso(), ruotare(), rotate_copy(), rimescolare(), random_shuffle(), trasformare(), sostituire(), replace_if() et al.

Altro artista - questo algoritmo funziona con 2 collezioni, aDisegno e in movimento contenuto (inoltre, forse, tra i diversi tipi di collezioni, per esempio, vettore<> in impostato<>): copia(), copy_if(), mossa(), swap_ranges(), remove_copy(), remove_copy_if(), fondere(), set_intersection(), set_difference() et al.

e, infine, speciale gruppo di algoritmi è associata con una varietà di cernite elementi all'interno della collezione: ordinare(), stable_sort(), is_sorted(), is_sorted_until() et al. Questo interessante gruppo di noi da parte, per un esame approfondito separata.

Con una tale abbondanza di algoritmi implementati, e il cui numero aumenta con biblioteca tempo, e che, che la maggior parte di loro non realmente da nessuna parte descritto in letteratura, la domanda sorge spontanea: come capire tutta questa diversità? Queste difficoltà sono rimossi in modo che:

  • Tutti gli oggetti STL (contenitori, algoritmi) descritto nei modelli di sintassi (modello). Pertanto, le loro descrizioni necessariamente Si dovrebbe essere inclusa nel codice compilato come parte dei loro file header (file header).

  • Passare alla directory di default </usr / include / C ++> e trovare i file di intestazione dei file di modulo stl_algo * - Vi si possono trovare tutte le funzioni prototipi algoritmi. inoltre, c'è ogni prototipo è preceduta da un approfondito commento, spiegando lo scopo dell'algoritmo, e spiega le opzioni call.

  • Si consideri il codice di esempio, utilizzando alcuni BASICx algoritmi STL - un sacco di loro nella rete. Per analogia elementare e semplicemente riprodurre il comportamento tutto gli altri algoritmi.

nota: Ciò è dovuto al fatto, che la libreria di classi template sono definiti in termini di modello, sugli errori di sintassi sono una raccolta). mnogoslovnыmi, per decine di linee di messaggi e B). terribilmente vaghi per trovare i bug. Questo è il rovescio della medaglia di un potente meccanismo come il modello, e questo dovrebbe essere pronto.

Come ho già detto in precedenza, casi di studio saranno rimuovere un sacco di domande, e quindi procedere al codice … Ora guardare con attenzione per le mani (STL è un insieme di algoritmi, che ogni commento – oltre una ragionevole presentazione del volume, ma tutto il lavoro come altro):

Qui contenitori utilizzati per carbonizzare (più compatto, ma il lavoro più sgradevole), su cui eseguire una varietà di algoritmi per quasi tutti i gruppi designati:

dimensione алгоритмы, trova(), contare(), count_if(), ricerca(), binary_search(), min(), max(), minmax_element(), min_element(), max_element(), pari()

Newsletter nuove lezioni sulla programmazione:

olio

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.

3 pensieri su "algoritmi. STL (parte 10)

Lascia un Commento

Inserire il codice nei tag: <pre class="lang:C ++ decodifica:true ">IL TUO CODICE</pre>