Imposta l'intersezione in C ++

Imposta l'intersezione in C ++
Di seguito sono riportati i set di due caratteri:
p = 'H', 'g', 'f', 'e', ​​'d'
Q = 'J', 'I', 'H', 'G', 'f'

In C ++, l'intersezione di questi due set sarebbe:

r = 'f', 'g', 'h'

disposto in ordine crescente in base alle impostazioni predefinite. Sono possibili l'intersezione di altri tipi di set come l'intersezione di insiemi di numeri interi, l'intersezione di insiemi di galleggianti, l'intersezione di insiemi di doppi, ecc.

La classe set nella libreria set C ++, che dovrebbe essere inclusa nel programma per il set di lavori, non ha una funzione membro per l'intersezione. Quindi, al fine di ottenere l'intersezione di set, la libreria dell'algoritmo, che ha la funzione set_intersection (), deve essere inclusa nel programma.

La libreria di algoritmo C ++ ha un numero di funzioni sovraccariche set_intersection. Solo i due più semplici sono spiegati in questo articolo. Tuttavia, prima dell'inizio delle spiegazioni, il lettore deve conoscere la differenza tra iteratore di output, iteratore di input e iteratore in avanti.

Outputteratore e forwardterator

Un iteratore è un puntatore di classe. Un outputteratore è un iteratore a cui è possibile assegnare un valore con l'espressione dereferenziata. Ad esempio, se l'iteratore è io per i numeri interi, allora;

*i = 5;

farei indicare la posizione della memoria che ha il valore, 5.

Un inputterator è un iteratore la cui espressione dereferenziata restituirebbe il valore a cui punta l'iteratore. Ad esempio, se l'iteratore è io per i numeri interi e indica la posizione della memoria che ha il numero 7, allora;

int num = *i;

Farebbe NUM in trattenere il valore, 5.

Un inoltratore è una forma elaborata dell'iteratore di input.

Gamme

Quando i valori destinati a un set sono stati inseriti nel set, i valori vengono ordinati in ordine crescente in base alle impostazioni predefinite. Con set, due iteratori in avanti possono essere utilizzati per identificare una serie di elementi nel set. Questo articolo riguarda l'intera gamma del set. Il seguente programma mostra come ottenere gli iteratori in avanti che rappresentano l'intera gamma di un set:

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

impostato p = 'H', 'g', 'f', 'e', ​​'d';
impostato:: iterator prima = P.inizio();
impostato:: iterator Last = P.FINE();
restituzione 0;

Nota l'uso delle funzioni membro Begin () e End () della classe set.

Ai fini dell'intersezione di due set completi, ci saranno First1 e Last1 per il primo set; e First2 e Last2 per il secondo set; per entrambi i gamme completi.

Iteratore di output

Le due funzioni set_intersection considerate in questo articolo restituiscono un iteratore di output. Sfortunatamente, la classe set non ha un iteratore di output. Bene, la classe vettoriale ha. Ciò significa che l'iteratore di output della classe vettoria. Un'altra buona notizia è che questo iteratore vettoriale può servire sia come iteratore di output che come iteratore di input. Non dimenticare di includere il vettore per utilizzarlo nel programma.

Le due funzioni sovraccaricate set_intersection sopra menzionate possono ora essere discusse.

Funzione di base set_intersection

La sintassi per questa funzione nella libreria dell'algoritmo è:

modello
Outputterator di Costexpr
set_intersection (inputterator1 first1, inputterator1 Last1,
Inputterator2 first2, inputterator2 last2, risultato outputterator)

L'outputteratore è l'iteratore di uscita di ritorno, ottenuto dalla classe vettoriale. Sarebbe puntato subito dopo l'ultimo elemento pratico nel vettore. Ciò significa che la dimensione del vettore vuoto per ricevere l'intersezione di set deve essere stimata essere al di sopra di quello del numero di valori nell'intersezione. L'ultimo risultato dell'argomento è il puntatore dell'iteratore di output che punta all'inizio del vettore, che riceverà l'intersezione di set.

Con il vettore, l'iteratore di output restituito, che sembra anche essere un iteratore di input, può essere utilizzato per visualizzare i valori dell'intersezione di set usando il per loop per loop. Con l'introduzione precedente per questo articolo, il resto dei parametri della funzione diventa autoesplicativo. Il seguente programma mostra come utilizzare questa funzione:

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

impostato p = 'H', 'g', 'f', 'e', ​​'d';
impostato:: iterator First1 = P.inizio(); Set :: iterator Last1 = P.FINE();
impostato Q = 'J', 'I', 'H', 'G', 'f';
impostato:: iterator First2 = Q.inizio(); Set :: iterator Last2 = Q.FINE();
vettore VTR (10);
vettore:: iterator outit = set_intersection (First1, Last1, First2, Last2, VTR.inizio());
VTR.RISIZE (OUTIT - VTR.inizio());
per (outit = vtr.inizio(); outit != vtr.FINE(); outit ++)
cout << *outIt << ", ";
cout << endl;
restituzione 0;

Si noti che il vettore doveva essere ridimensionato per contenere solo gli elementi dell'intersezione dopo che la funzione set_intersection () era stata chiamata. L'output è:

F, G, H,

Funzione di base set_intersection con confronto personalizzato

La sintassi per questa funzione nella libreria dell'algoritmo è:

modello
Outputterator di Costexpr
set_intersection (inputterator1 first1, inputterator1 Last1,
Inputterator2 first2, inputterator2 last2,
Risultato di outputteratore, confronta comp);

L'outputteratore è l'iteratore di uscita di ritorno ottenuto dalla classe vettoriale. Sarebbe puntato subito dopo l'ultimo elemento pratico del vettore. Ciò significa che la dimensione del vettore vuoto per ricevere l'intersezione di set deve essere stimata essere al di sopra di quello del numero di valori nell'intersezione. Il risultato dell'argomento dell'ultimo ma uno è il puntatore dell'iteratore di output che punta all'inizio del vettore, che riceverà l'intersezione di set.

Con il vettore, l'iteratore di output restituito, che è anche un iteratore di input, può essere utilizzato per visualizzare i valori dell'intersezione di set usando il per loop per loop.

Comp, è una funzione di programmatore definita. Può essere:

bool comp (char a, char b)
se un != b)
restituire vero;
altro
restituire false;

Questa funzione comp () restituisce vera o falsa. Dall'introduzione di questo articolo sopra, il resto dei parametri della funzione set_intersection, sono autoesplicativi.

Con l'intestazione del programma di cui sopra, la seguente funzione principale () utilizzerà correttamente la funzione comp ().

int main ()

impostato p = 'H', 'g', 'f', 'e', ​​'d';
impostato:: iterator First1 = P.inizio(); impostato:: iterator last1 = P.FINE();
impostato Q = 'J', 'I', 'H', 'G', 'f';
impostato:: iterator First2 = Q.inizio(); impostato:: iterator Last2 = Q.FINE();
vettore VTR (10);
vettore:: iterator outit = set_intersection (First1, Last1, First2, Last2, VTR.inizio (), comp);
VTR.RISIZE (OUTIT - VTR.inizio());
per (outit = vtr.inizio(); outit != vtr.FINE(); outit ++)
cout << *outIt << ", ";
cout << endl;
restituzione 0;

L'output è:

F, G, H,

come prima.

Conclusione

La classe set nella libreria set C ++, che dovrebbe essere inclusa nel programma per il set di lavori, non ha una funzione membro per l'intersezione. Quindi, al fine di ottenere l'intersezione di set, la libreria dell'algoritmo, che ha la funzione set_intersection (), deve essere inclusa nel programma.

La libreria di algoritmo C ++ ha un numero di funzioni sovraccariche set_intersection. A gennaio 2022, due di queste funzioni che molto probabilmente sono state implementate dal tuo compilatore, sono state spiegate sopra. I compilatori devono ancora implementare il resto delle funzioni set_intersection () sovraccarichi trovate nella specifica C ++.