Ordinamento dei vettori C ++

Ordinamento dei vettori C ++
Il vettore C ++ è come un array con funzioni membro (metodi). La lunghezza del vettore può essere aumentata o diminuita nell'esecuzione del programma. Il vettore ha molte funzioni dei membri. Tra tutte queste funzioni dei membri, non orribili il vettore. Tuttavia, C ++ ha una libreria chiamata Algoritm Library. Questa biblioteca ha molte funzioni algoritmiche per scopi generali. Uno di questi è la funzione Ord (). Questa funzione può essere utilizzata per ordinare i contenitori C ++ come il vettore. Tutti i valori di un vettore sono valori dello stesso tipo.

Un programmatore può scrivere la sua funzione di tipo (). Tuttavia, è probabile che la funzione di ordinamento () dalla libreria dell'algoritmo abbia funzionante meglio di ciò che scrive il programmatore ordinario.

La funzione Ordine () può ordinare i valori di un vettore in ordine crescente o in ordine decrescente. Per ordinare un vettore, la libreria dell'algoritmo deve essere inclusa. Anche la libreria vettoriale deve essere inclusa. L'inizio del programma dovrebbe essere qualcosa di simile:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;

Il vettore è in realtà una classe, da cui è possibile creare oggetti vettoriali. Con la sezione di alto livello del programma, un vettore da ordinare, può essere creato come segue:

vettore vtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';

Il nome della classe è un vettore. Il nome dell'oggetto istanziato è VTR.

In questo tutorial, la codifica di ordinamento viene eseguita nella funzione C ++ Main (). Questo tutorial spiega come ordinare un vettore C ++ usando il vettore sopra, VTR.

Contenuto dell'articolo

  • Ordinamento predefinito
  • Ordinamento in ordine decrescente
  • Funzione di confronto personalizzata
  • Altri tipi di dati
  • Conclusione

Ordinamento predefinito

Ordinamento predefinito in ordine crescente. La sintassi per questo è:

modello
Ordine void (prima acceccessator di base, ultimo casuale);

Ordinando l'intero vettore

Il seguente codice ordina l'intero vettore:

Ordina (VTR.inizio (), vtr.FINE());
per (int i = 0; icout<cout<L'elenco non desiderato è:

Z, x, c, v, b, n, m, a, s, d

L'elenco ordinato è:

A, B, C, D, M, N, S, V, X, Z,

che è corretto. Se l'ordinamento non è corretto, allora il guasto è quello del programmatore e non quello della funzione di ordinamento ().

Il randominettator è intrinseco. VTR.inizio () restituisce un iteratore che indica il primo elemento e VTR.end () restituisce un altro iteratore dello stesso tipo che punta subito dopo l'ultimo elemento. Quindi non è necessario istanziare un vettore che indica, randomizzatore. In questo modo, l'intero elenco è ordinato.

Ordinare un intervallo in ordine crescente

L'elenco non orientato sopra ha dieci elementi con indici:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Per ordinare solo gli elementi dalla posizione 4, che è indice, 3 = 4 - 1, posizione 9, che è indice, 8 = 9 - 1, aggiungi 3 a VTR.Inizia () per avere il primo iteratore, quindi aggiungi 8 a VTR.Inizia () per avere l'ultimo iteratore, per la funzione Sort (). Il 9th L'elemento dell'indice 8 non sarà incluso nell'ordinamento. Cioè, l'ultimo elemento indicato nell'intervallo scelto, è escluso per l'ordinamento. Il seguente codice illustra questo:

Ordina (VTR.inizio () + 3, vtr.inizio () + 8);
per (int i = 0; icout<cout<L'elenco non desiderato è:

Z, x, c, v, b, n, m, a, s, d
[/c] c
L'elenco ordinato è:
[cc lang = "text" width = "100%" height = "100%" sfuggito = "vero" tema = "blackboard" nowRap = "0"]
Z, x, c, a, b, m, n, v, s, d,

Gli elementi nelle posizioni 4, 5, 6, 7, 8 sono stati ordinati. L'elemento al 9th La posizione non è stata inclusa nel tipo. Queste posizioni corrispondono agli indici 3, 4, 5, 6, 7. L'elemento su Index 8 non è stato incluso nel tipo.

Quindi, per ordinare un intervallo, identificare i primi e gli ultimi elementi nella gamma, non necessariamente dell'intero elenco. Aggiungi l'indice del primo elemento all'iteratore di inizio (). Aggiungi l'indice dell'ultimo elemento, ancora all'inizio (). Ricorda che l'ultimo elemento per l'intervallo non sarà incluso nel tipo, ma il primo elemento per l'intervallo verrà incluso.

L'aggiunta di un indice a un iteratore è possibile perché l'aggiunta di un numero è lo stesso dell'incremento dell'iteratore che lo stesso numero di volte. Incrementare un iteratore una volta lo rende un punto all'elemento successivo.

Ordinamento in ordine decrescente

La sintassi è:

modello
Ordine void (prima acceccessore di randome, ultimo randomeacceccessiterator, confronta comp);

Ciò differisce dalla sintassi sopra con la presenza di "confronta comp". comp è un puntatore di funzione o un oggetto funzione. Comp effettivamente decide se l'ordinamento dovrebbe essere ascendente o discendente. La sua assenza è il caso predefinito, il che significa scendere.

Ordinamento dell'intero elenco in ordine decrescente

Il seguente codice ordina l'intero vettore sopra in ordine decrescente:

Ordina (VTR.inizio (), vtr.fine (), maggiore());
per (int i = 0; icout<cout<L'elenco non desiderato è:

Z, x, c, v, b, n, m, a, s, d

Il vettore ordinato in ordine decrescente è:

Z, x, v, s, n, m, d, c, b, a,

Nota l'uso di "maggiore ()" nel luogo di comp.

L'opposto di maggiore () è inferiore (), che è il valore predefinito (ascendente) e non deve essere digitato.

Ordinare un intervallo in ordine decrescente

Un intervallo può essere ordinato in ordine decrescente e in ordine crescente. Il seguente codice ordina il 4th al 9th elemento senza includere il 9th elemento; e discendente.

Ordina (VTR.inizio () + 3, vtr.inizio () + 8, maggiore());
per (int i = 0; icout<cout<L'elenco non desiderato è:

Z, x, c, v, b, n, m, a, s, d

Il vettore con l'intervallo scelto, ordinato in ordine decrescente, è:

Z, x, c, v, n, m, b, a, s, d,

Funzione di confronto personalizzata

Il seguente programma ha una funzione di confronto personalizzata per l'ordinamento ascendente:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool confront (char a, char b)
restituire (a < b);

int main ()

Ordina (VTR.inizio (), vtr.end (), confronta);
per (int i = 0; icout<cout<restituzione 0;

La funzione per fare il confronto è chiamata confronto. Restituisce un bool. Ha due parametri, A e B, dello stesso tipo, del tipo di elemento vettoriale. Restituisce vero se a è inferiore a b e falso altrimenti. Il nome di questa funzione è il terzo argomento della chiamata di funzione ordina (). In questo programma, il confronto è lo stesso di meno (). Alcuni altri nomi invece di confrontare possono essere usati.

L'elenco non desiderato è:

Z, x, c, v, b, n, m, a, s, d

L'elenco ordinato è:

A, B, C, D, M, N, S, V, X, Z,

Naturalmente la funzione di confronto personalizzata può essere utilizzata per un intervallo. Il seguente programma illustra questo:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool confront (char a, char b)
restituire (a < b);

int main ()

Ordina (VTR.inizio () + 3, vtr.inizio () + 8, confronta);
per (int i = 0; icout<cout<restituzione 0;

L'elenco non desiderato è:

Z, x, c, v, b, n, m, a, s, d

L'elenco ordinato è:

Z, x, c, a, b, m, n, v, s, d,

La funzione di confronto può essere codificata per la discendenza. Il seguente programma illustra questo:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool confront (char a, char b)
restituire (a> b);

int main ()

Ordina (VTR.inizio (), vtr.end (), confronta);
per (int i = 0; icout<cout<restituzione 0;

Basta cambiare (a b).

L'elenco non desiderato è:

Z, x, c, v, b, n, m, a, s, d

L'elenco ordinato è:

Z, x, v, s, n, m, d, c, b, a,

La funzione di confronto personalizzata può essere utilizzata per un intervallo, in ordine decrescente. Il seguente programma illustra questo:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool confront (char a, char b)
restituire (a> b);

int main ()

Ordina (VTR.inizio ()+3, vtr.inizio ()+8, confronta);
per (int i = 0; icout<cout<restituzione 0;

L'elenco non desiderato è:

Z, x, c, v, b, n, m, a, s, d

Il vettore con l'intervallo scelto, ordinato in ordine decrescente, è:

Z, x, c, v, n, m, b, a, s, d,

Altri tipi di dati

Altri tipi di dati possono essere ordinati usando i loro tipi. Ad esempio, se il tipo di dati INT deve essere ordinato, "INT" verrebbe utilizzato per creare il vettore e nella funzione di confronto integrata o personalizzata. Se il tipo di dati è in una libreria, l'intestazione della libreria deve essere inclusa nel programma, come per il caso della stringa sottostante:

#includere
#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
vectorvtr = "ze", "xe", "ce", "ve", "be", "ne", "me", "ae", "se", "de";
int main ()

Ordina (VTR.inizio (), vtr.fine (), maggiore ());
per (int i = 0; icout<cout<restituzione 0;

L'elenco non desiderato è:

Ze, xe, ce, ve, be, ne, me, ae, se, de

L'elenco ordinato è:

Ze, xe, ve, se, ne, me, de, ce, be, ae,

Conclusione

C ++ viene fornito con la libreria dell'algoritmo che ha una funzione di ordinamento (). Questa funzione prende due o tre argomenti nel suo uso normale. Il primo argomento è in cui l'elenco vettoriale, il tipo dovrebbe iniziare. Il secondo argomento è in cui l'elenco vettoriale, il tipo dovrebbe terminare. Il terzo argomento determina se l'ordinamento deve essere eseguito in ordine crescente o in ordine decrescente.