Come cambiare un set in un vettore in C ++

Come cambiare un set in un vettore in C ++
Un set può essere creato in C ++ come segue:
impostato p = 'j', 'i', 'h', 'g', 'f';

Successivamente, c'è l'ordinamento interno e i valori dell'insieme vengono disposti come segue in base alle impostazioni predefinite:

'F', 'g', 'h', 'i', 'j'

Quando il set viene convertito in un vettore, questa nuova disposizione viene mantenuta fino a quando non viene modificato. Per codificare il set in un programma C ++, la libreria set deve essere inclusa. Per codificare il vettore in un programma C ++, la libreria vettoriale deve essere inclusa.

Esistono diversi modi per cambiare un set in un vettore. In questo articolo sono spiegati tre semplici modi. Due di questi metodi da spiegare in questo articolo, trattano le funzioni dei membri della classe vettoriale. L'altro metodo tratta la funzione di copia della libreria dell'algoritmo.

Vanno dal set

Una serie di elementi può essere ottenuta da un set. Questo intervallo non includerebbe l'ultimo elemento indicato. La gamma esce in due iteratori dello stesso tipo per un set. Il seguente programma illustra questo:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

impostato st = 'j', 'i', 'h', 'g', 'f';
impostato:: iterator itb = st.inizio(); Set :: iterator ite = st.FINE();
ITB ++; ite--;
per (set:: iterator IT = ITB; Esso != ite; It ++)
cout << *it << ", ";
cout << endl;
restituzione 0;

L'output è:

G, h, i,

Ricorda che i valori nel set erano stati riorganizzati in ordine crescente in base alle impostazioni predefinite dopo l'inserimento. L'iteratore ITB punta appena prima del primo elemento del set riordinato. L'iteratore Ite punta appena oltre l'ultimo elemento del set riordinato all'inizio. "ITB ++" quindi punta al secondo elemento, mentre "Ite-" quindi punta all'ultimo elemento per l'intervallo. Quest'ultimo elemento non sarà incluso nell'intervallo.

Il per loop stampica la gamma, ['g', 'h', 'i' [, escluso 'j' come dovrebbe.

Nel caso di convertire l'intero set in un vettore, è necessario utilizzare l'intera gamma del set. Quindi, ITB o Ite non dovrebbe essere né incrementato né decrementato.

Il costruttore vettoriale di gamma

Il costruttore vettoriale, che prende un intervallo come argomenti, è:

modello
costexpr vector (inputterator first, inputterator Last, const allocatore & = allocator ());

Se il terzo argomento non viene fornito, il valore predefinito viene scelto da c++. Confrontando questa sintassi con il codice sopra, prima sarebbe ITB e l'ultimo sarebbe.

Questo costruttore può quindi essere utilizzato nella conversione di un set in un vettore. Il seguente programma illustra questo:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

impostato st = 'j', 'i', 'h', 'g', 'f';
impostato:: iterator itb = st.inizio(); Set :: iterator ite = st.FINE();
vettore VTR (ITB, ite);
per (int i = 0; icout << vtr[i] << ", ";
cout << endl;
restituzione 0;

L'output è:

F, g, h, i, j,

smistato. L'argomento dell'allocatore è stato omesso nel codice. L'operatore di staffe quadrate è stata utilizzata per ottenere i valori del vettore che erano i valori ordinati dall'insieme.

Questo è stato un modo per convertire o cambiare un set in un vettore. Gli altri due modi vengono spiegati successivi:

Vector Assegna la funzione membro

Una delle sintassi per la funzione membro Assegna () vettoriale è:

modello
COSTEXPR void Assegna (inputIterator prima, inputterator Last)

Prende un intervallo come argomenti, primo e ultimo per lo stesso set iteratore. In questa situazione, il vettore vuoto deve essere costruito per primo. Successivamente, il metodo Assegna aggiungerà tutti gli elementi del set al vettore. Il contenuto impostato rimane invariato ma comunque ordinato. Il seguente programma illustra l'uso della funzione del membro Assegna:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

impostato st = 'j', 'i', 'h', 'g', 'f';
impostato:: iterator itb = st.inizio(); impostato:: iterator ite = st.FINE();
vettore VTR;
VTR.Assegna (ITB, ite);
per (set:: iterator IT = ITB; Esso != ite; it ++) cout << *it << ", "; cout << endl;
per (int i = 0; irestituzione 0;

L'output è:

F, g, h, i, j,
F, g, h, i, j,

Il primo per loop è visualizzare il contenuto impostato invariato. Il secondo è visualizzare il vettore il cui contenuto all'inizio è quello del set ordinato.

Questo è stato il secondo metodo per convertire o modificare un set in un vettore. Segue la spiegazione del terzo metodo per questo articolo:

Una funzione Copy () nella libreria dell'algoritmo

La sintassi di una delle funzioni di copia nella libreria dell'algoritmo è:

modello
Copia dell'outputputPiterator di Costexpr (inputIterator prima, inputPerator Last, risultato outputIterator)

Nel caso di Vector, l'iteratore di ritorno è sia un iteratore di input che un iteratore di output contemporaneamente. Se P è un iteratore di input, allora *P restituirebbe il valore indicato da P. Se P è un iteratore di output, allora *P può ricevere un valore per la posizione della memoria indicata da P.

Il primo e il secondo argomento qui sono gli stessi della funzione precedente. Il risultato dell'argomento è un outputputteratore che indica il primo elemento del vettore.

L'outputputteratore di ritorno qui, punta subito dopo l'ultimo elemento del vettore. Ciò significa che il vettore deve essere creato con una dimensione almeno uguale alla dimensione del set.

Con questa funzione Copy (), la libreria dell'algoritmo deve essere inclusa nel programma perché la funzione è nella libreria dell'algoritmo. Il seguente codice nella funzione C ++ main () mostra come utilizzare la funzione di copia:

impostato st = 'j', 'i', 'h', 'g', 'f';
impostato:: iterator itb = st.inizio(); Set :: iterator ite = st.FINE();
vettore VTR (10);
vettore:: iterator outit = copia (ITB, ite, vtr.inizio());
VTR.RISIZE (OUTIT - VTR.inizio());
per (set:: iterator IT = ITB; Esso != ite; it ++) cout << *it << ", "; cout << endl;
per (int i = 0; irestituzione 0;

L'output è:

F, g, h, i, j,
F, g, h, i, j,

L'outputteratore restituito è del vettore. Il vettore doveva essere ridimensionato al numero di elementi che si trovano nel set. Il contenuto del set non è cambiato.

Conclusione

Un set può essere modificato in un vettore utilizzando il costruttore del vettore di intervallo o la funzione membro Assegna () vettoriale o la funzione della libreria dell'algoritmo (). Ci sono altri metodi meno facili da codificare - vedi più tardi.