Classe concurrent_vector
La classe concurrent_vector
è una classe contenitore di sequenze che consente un accesso casuale a qualsiasi elemento. Abilita accodamento, accesso elementi, accesso iteratori e operazioni traversali di iterazione indipendenti dalla concorrenza. In questo caso, i puntatori o gli iteratori sicuri per la concorrenza sono sempre validi. Non è una garanzia di inizializzazione degli elementi o di un ordine attraversamento specifico.
Sintassi
template<typename T, class _Ax>
class concurrent_vector: protected details::_Allocator_base<T,
_Ax>,
private details::_Concurrent_vector_base_v4;
Parametri
T
Tipo di dati degli elementi da archiviare nel vettore.
_Ascia
Tipo che rappresenta l'oggetto allocatore archiviato che incapsula i dettagli sull'allocazione e la deallocazione della memoria per il vettore simultaneo. Questo argomento è facoltativo e il valore predefinito è allocator<T>
.
Membri
Typedef pubblici
Nome | Descrizione |
---|---|
allocator_type |
Tipo che rappresenta la classe allocatore per il vettore simultaneo. |
const_iterator |
Tipo che fornisce un iteratore ad accesso casuale in grado di leggere un const elemento in un vettore simultaneo. |
const_pointer |
Tipo che fornisce un puntatore a un const elemento in un vettore simultaneo. |
const_reference |
Tipo che fornisce un riferimento a un const elemento archiviato in un vettore simultaneo per la lettura e l'esecuzione di const operazioni. |
const_reverse_iterator |
Tipo che fornisce un iteratore ad accesso casuale in grado di leggere qualsiasi const elemento nel vettore simultaneo. |
difference_type |
Tipo che fornisce la distanza con segno tra due elementi in un vettore simultaneo. |
iterator |
Tipo che fornisce un iteratore ad accesso casuale in grado di leggere qualsiasi elemento in un vettore simultaneo. La modifica di un elemento che usa l'iteratore non è sicura per la concorrenza. |
pointer |
Tipo che fornisce un puntatore a un elemento in un vettore simultaneo. |
reference |
Tipo che fornisce un riferimento a un elemento archiviato in un vettore simultaneo. |
reverse_iterator |
Tipo che fornisce un iteratore ad accesso casuale in grado di leggere qualsiasi elemento in un vettore simultaneo invertito. La modifica di un elemento che usa l'iteratore non è sicura per la concorrenza. |
size_type |
Tipo che conta il numero di elementi in un vettore simultaneo. |
value_type |
Tipo che rappresenta il tipo di dati archiviato in un vettore simultaneo. |
Costruttori pubblici
Nome | Descrizione |
---|---|
concurrent_vector | Con overload. Costruisce un vettore simultaneo. |
Distruttore ~concurrent_vector | Cancella tutti gli elementi e distrugge questo vettore simultaneo. |
Metodi pubblici
Nome | Descrizione |
---|---|
assign | Con overload. Cancella gli elementi del vettore simultaneo e gli assegna copie _N di _Item o valori specificati dall'intervallo iteratore [ _Begin , _End ). Questo metodo non è sicuro per la concorrenza. |
at | Con overload. Fornisce l'accesso all'elemento in corrispondenza dell'indice specificato nel vettore simultaneo. Questo metodo è indipendente dalla concorrenza per le operazioni di lettura e anche durante l'aumento del vettore, purché sia stato garantito che il valore _Index sia minore delle dimensioni del vettore simultaneo. |
back | Con overload. Restituisce un riferimento o un const riferimento all'ultimo elemento nel vettore simultaneo. Se il vettore simultaneo è vuoto, il valore restituito non è definito. Questo metodo è indipendente dalla concorrenza. |
begin | Con overload. Restituisce un iteratore di tipo iterator o const_iterator all'inizio del vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
capacity | Restituisce le dimensioni massime a cui il vettore simultaneo può crescere senza dover allocare più memoria. Questo metodo è indipendente dalla concorrenza. |
cbegin | Restituisce un iteratore di tipo const_iterator all'inizio del vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
cend | Restituisce un iteratore di tipo const_iterator alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
deselezionare | Cancella tutti gli elementi nel vettore simultaneo. Questo metodo non è sicuro per la concorrenza. |
crbegin | Restituisce un iteratore di tipo const_reverse_iterator all'inizio del vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
crend | Restituisce un iteratore di tipo const_reverse_iterator alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
empty | Verifica se il vettore simultaneo è vuoto al momento della chiamata di questo metodo. Questo metodo è indipendente dalla concorrenza. |
end | Con overload. Restituisce un iteratore di tipo iterator o const_iterator alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
front | Con overload. Restituisce un riferimento o un const riferimento al primo elemento nel vettore simultaneo. Se il vettore simultaneo è vuoto, il valore restituito non è definito. Questo metodo è indipendente dalla concorrenza. |
get_allocator | Restituisce una copia dell'allocatore utilizzato per costruire il vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
grow_by | Con overload. Aumenta questo vettore simultaneo in base a _Delta elementi. Questo metodo è indipendente dalla concorrenza. |
grow_to_at_least | Aumenta questo vettore simultaneo fino a quando non ha almeno _N elementi. Questo metodo è indipendente dalla concorrenza. |
max_size | Restituisce il numero massimo di elementi che il vettore simultaneo può contenere. Questo metodo è indipendente dalla concorrenza. |
push_back | Con overload. Aggiunge l'elemento specificato alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
rbegin | Con overload. Restituisce un iteratore di tipo reverse_iterator o const_reverse_iterator all'inizio del vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
rend | Con overload. Restituisce un iteratore di tipo reverse_iterator o const_reverse_iterator alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
reserve | Alloca spazio sufficiente per aumentare le dimensioni _N del vettore simultaneo senza dover allocare più memoria in un secondo momento. Questo metodo non è sicuro per la concorrenza. |
resize | Con overload. Modifica le dimensioni del vettore simultaneo in base alle dimensioni richieste, eliminando o aggiungendo elementi in base alle esigenze. Questo metodo non è sicuro per la concorrenza. |
shrink_to_fit | Compatta la rappresentazione interna del vettore simultaneo per ridurre la frammentazione e ottimizzare l'utilizzo della memoria. Questo metodo non è sicuro per la concorrenza. |
size | Restituisce il numero di elementi nel vettore simultaneo. Questo metodo è indipendente dalla concorrenza. |
swap | Scambia il contenuto di due vettori simultanei. Questo metodo non è sicuro per la concorrenza. |
Operatori pubblici
Nome | Descrizione |
---|---|
operator[] | Con overload. Fornisce l'accesso all'elemento in corrispondenza dell'indice specificato nel vettore simultaneo. Questo metodo è indipendente dalla concorrenza per le operazioni di lettura e anche durante l'aumento del vettore, purché il valore _Index sia minore delle dimensioni del vettore simultaneo. |
operator= | Con overload. Assegna il contenuto di un altro concurrent_vector oggetto a questo oggetto. Questo metodo non è sicuro per la concorrenza. |
Osservazioni:
Per informazioni dettagliate sulla concurrent_vector
classe , vedere Contenitori e oggetti paralleli.
Gerarchia di ereditarietà
_Concurrent_vector_base_v4
_Allocator_base
concurrent_vector
Requisiti
Intestazione: concurrent_vector.h
Spazio dei nomi: Concurrency
assign
Cancella gli elementi del vettore simultaneo e gli assegna copie _N
di _Item
o valori specificati dall'intervallo iteratore [ _Begin
, _End
). Questo metodo non è sicuro per la concorrenza.
void assign(
size_type _N,
const_reference _Item);
template<class _InputIterator>
void assign(_InputIterator _Begin,
_InputIterator _End);
Parametri
_InputIterator
Tipo dell'iteratore specificato.
_N
Numero di elementi da copiare nel vettore simultaneo.
_Articolo
Riferimento a un valore utilizzato per riempire il vettore simultaneo.
_Cominciare
Iteratore al primo elemento dell'intervallo di origine.
_Fine
Iteratore che supera l'ultimo elemento dell'intervallo di origine.
Osservazioni:
assign
non è indipendente dalla concorrenza. È necessario assicurarsi che nessun altro thread richiami metodi sul vettore simultaneo quando si chiama questo metodo.
alle
Fornisce l'accesso all'elemento in corrispondenza dell'indice specificato nel vettore simultaneo. Questo metodo è indipendente dalla concorrenza per le operazioni di lettura e anche durante l'aumento del vettore, purché sia stato garantito che il valore _Index
sia minore delle dimensioni del vettore simultaneo.
reference at(size_type _Index);
const_reference at(size_type _Index) const;
Parametri
_Indice
Indice dell'elemento da recuperare.
Valore restituito
Riferimento all'elemento in corrispondenza dell'indice specificato.
Osservazioni:
La versione della funzione at
che restituisce un riferimento non const
può essere utilizzata per scrivere contemporaneamente nell'elemento da thread diversi. È necessario utilizzare un oggetto di sincronizzazione diverso per sincronizzare le operazioni di lettura e scrittura simultanee con lo stesso elemento dati.
Il metodo genera out_of_range
se _Index
è maggiore o uguale alla dimensione del vettore simultaneo e range_error
se l'indice è per una parte interrotta del vettore. Per informazioni dettagliate su come un vettore può diventare interrotto, vedere Contenitori e oggetti paralleli.
Indietro
Restituisce un riferimento o un const
riferimento all'ultimo elemento nel vettore simultaneo. Se il vettore simultaneo è vuoto, il valore restituito non è definito. Questo metodo è indipendente dalla concorrenza.
reference back();
const_reference back() const;
Valore restituito
Riferimento o riferimento const
all'ultimo elemento nel vettore simultaneo.
begin
Restituisce un iteratore di tipo iterator
o const_iterator
all'inizio del vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
iterator begin();
const_iterator begin() const;
Valore restituito
Iteratore di tipo iterator
o const_iterator
all'inizio del vettore simultaneo.
capacità
Restituisce le dimensioni massime a cui il vettore simultaneo può crescere senza dover allocare più memoria. Questo metodo è indipendente dalla concorrenza.
size_type capacity() const;
Valore restituito
Dimensione massima raggiungibile dal vettore simultaneo senza dover allocare altra memoria.
Osservazioni:
A differenza di una libreria vector
standard C++, un concurrent_vector
oggetto non sposta gli elementi esistenti se alloca più memoria.
cbegin
Restituisce un iteratore di tipo const_iterator
all'inizio del vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
const_iterator cbegin() const;
Valore restituito
Iteratore di tipo const_iterator
all'inizio del vettore simultaneo.
cend
Restituisce un iteratore di tipo const_iterator
alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
const_iterator cend() const;
Valore restituito
Iteratore di tipo const_iterator
alla fine del vettore simultaneo.
clear
Cancella tutti gli elementi nel vettore simultaneo. Questo metodo non è sicuro per la concorrenza.
void clear();
Osservazioni:
clear
non è indipendente dalla concorrenza. È necessario assicurarsi che nessun altro thread richiami metodi sul vettore simultaneo quando si chiama questo metodo. clear
non libera matrici interne. Per liberare matrici interne, chiamare la funzione shrink_to_fit
dopo clear
.
concurrent_vector
Costruisce un vettore simultaneo.
explicit concurrent_vector(
const allocator_type& _Al = allocator_type());
concurrent_vector(
const concurrent_vector& _Vector);
template<class M>
concurrent_vector(
const concurrent_vector<T,
M>& _Vector,
const allocator_type& _Al = allocator_type());
concurrent_vector(
concurrent_vector&& _Vector);
explicit concurrent_vector(
size_type _N);
concurrent_vector(
size_type _N,
const_reference _Item,
const allocator_type& _Al = allocator_type());
template<class _InputIterator>
concurrent_vector(_InputIterator _Begin,
_InputIterator _End,
const allocator_type& _Al = allocator_type());
Parametri
M
Tipo di allocatore del vettore di origine.
_InputIterator
Tipo di iteratore di input.
_Ale
Classe Allocator da usare con questo oggetto.
_Vettore
Oggetto concurrent_vector
di origine da cui copiare o spostare elementi.
_N
Capacità iniziale dell'oggetto concurrent_vector
.
_Articolo
Valore degli elementi nell'oggetto costruito.
_Cominciare
Posizione del primo elemento nell'intervallo di elementi da copiare.
_Fine
Posizione del primo elemento oltre l'intervallo di elementi da copiare.
Osservazioni:
Tutti i costruttori archiviano un oggetto _Al
allocatore e inizializzano il vettore.
Il primo costruttore specifica un vettore iniziale vuoto e specifica in modo esplicito il tipo di allocatore. da utilizzare.
Il secondo e il terzo costruttore specificano una copia del vettore _Vector
simultaneo .
Tramite il quarto costruttore viene specificato un movimento del vettore simultaneo _Vector
.
Il quinto costruttore specifica una ripetizione di un numero specificato ( _N
) di elementi del valore predefinito per la classe T
.
Il sesto costruttore specifica una ripetizione di elementi ( _N
) di valore _Item
.
L'ultimo costruttore specifica i valori forniti dall'intervallo di iteratori [ _Begin
, _End
).
~concurrent_vector
Cancella tutti gli elementi e distrugge questo vettore simultaneo.
~concurrent_vector();
crbegin
Restituisce un iteratore di tipo const_reverse_iterator
all'inizio del vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
const_reverse_iterator crbegin() const;
Valore restituito
Iteratore di tipo const_reverse_iterator
all'inizio del vettore simultaneo.
crend
Restituisce un iteratore di tipo const_reverse_iterator
alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
const_reverse_iterator crend() const;
Valore restituito
Iteratore di tipo const_reverse_iterator
alla fine del vettore simultaneo.
empty
Verifica se il vettore simultaneo è vuoto al momento della chiamata di questo metodo. Questo metodo è indipendente dalla concorrenza.
bool empty() const;
Valore restituito
true
se il vettore è vuoto nel momento in cui la funzione è stata chiamata, false
in caso contrario.
end
Restituisce un iteratore di tipo iterator
o const_iterator
alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
iterator end();
const_iterator end() const;
Valore restituito
Iteratore di tipo iterator
o const_iterator
alla fine del vettore simultaneo.
front
Restituisce un riferimento o un const
riferimento al primo elemento nel vettore simultaneo. Se il vettore simultaneo è vuoto, il valore restituito non è definito. Questo metodo è indipendente dalla concorrenza.
reference front();
const_reference front() const;
Valore restituito
Riferimento o const
riferimento al primo elemento nel vettore simultaneo.
get_allocator
Restituisce una copia dell'allocatore utilizzato per costruire il vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
allocator_type get_allocator() const;
Valore restituito
Copia dell'allocatore utilizzato per costruire l'oggetto concurrent_vector
.
grow_by
Aumenta questo vettore simultaneo in base a _Delta
elementi. Questo metodo è indipendente dalla concorrenza.
iterator grow_by(
size_type _Delta);
iterator grow_by(
size_type _Delta,
const_reference _Item);
Parametri
_Delta
Numero di elementi da accodare all'oggetto.
_Articolo
Valore con cui inizializzare i nuovi elementi.
Valore restituito
Iteratore al primo elemento aggiunto.
Osservazioni:
Se _Item
non viene specificato, i nuovi elementi vengono costruiti per impostazione predefinita.
grow_to_at_least
Aumenta questo vettore simultaneo fino a quando non ha almeno _N
elementi. Questo metodo è indipendente dalla concorrenza.
iterator grow_to_at_least(size_type _N);
Parametri
_N
Nuova dimensione minima per l'oggetto concurrent_vector
.
Valore restituito
Iteratore che punta all'inizio della sequenza accodata o all'elemento in corrispondenza dell'indice _N
se non sono stati aggiunti elementi.
max_size
Restituisce il numero massimo di elementi che il vettore simultaneo può contenere. Questo metodo è indipendente dalla concorrenza.
size_type max_size() const;
Valore restituito
Numero massimo di elementi che l'oggetto concurrent_vector
può contenere.
operator=
Assegna il contenuto di un altro concurrent_vector
oggetto a questo oggetto. Questo metodo non è sicuro per la concorrenza.
concurrent_vector& operator= (
const concurrent_vector& _Vector);
template<class M>
concurrent_vector& operator= (
const concurrent_vector<T, M>& _Vector);
concurrent_vector& operator= (
concurrent_vector&& _Vector);
Parametri
M
Tipo di allocatore del vettore di origine.
_Vettore
Oggetto concurrent_vector
di origine.
Valore restituito
Riferimento a questo concurrent_vector
oggetto.
operator[]
Fornisce l'accesso all'elemento in corrispondenza dell'indice specificato nel vettore simultaneo. Questo metodo è indipendente dalla concorrenza per le operazioni di lettura e anche durante l'aumento del vettore, purché il valore _Index
sia minore delle dimensioni del vettore simultaneo.
reference operator[](size_type _index);
const_reference operator[](size_type _index) const;
Parametri
_Indice
Indice dell'elemento da recuperare.
Valore restituito
Riferimento all'elemento in corrispondenza dell'indice specificato.
Osservazioni:
La versione di operator []
che restituisce un riferimento non const
può essere utilizzata per scrivere simultaneamente nell'elemento da thread diversi. È necessario utilizzare un oggetto di sincronizzazione diverso per sincronizzare le operazioni di lettura e scrittura simultanee con lo stesso elemento dati.
Non viene eseguito alcun controllo dei limiti per assicurarsi che _Index
sia un indice valido nel vettore simultaneo.
push_back
Aggiunge l'elemento specificato alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
iterator push_back(const_reference _Item);
iterator push_back(T&& _Item);
Parametri
_Articolo
Valore da accodare.
Valore restituito
Iteratore all'elemento aggiunto.
rbegin
Restituisce un iteratore di tipo reverse_iterator
o const_reverse_iterator
all'inizio del vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
Valore restituito
Iteratore di tipo reverse_iterator
o const_reverse_iterator
all'inizio del vettore simultaneo.
rend
Restituisce un iteratore di tipo reverse_iterator
o const_reverse_iterator
alla fine del vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
reverse_iterator rend();
const_reverse_iterator rend() const;
Valore restituito
Iteratore di tipo reverse_iterator
o const_reverse_iterator
alla fine del vettore simultaneo.
reserve
Alloca spazio sufficiente per aumentare le dimensioni _N
del vettore simultaneo senza dover allocare più memoria in un secondo momento. Questo metodo non è sicuro per la concorrenza.
void reserve(size_type _N);
Parametri
_N
Numero di elementi per cui riservare spazio.
Osservazioni:
reserve
non è indipendente dalla concorrenza. È necessario assicurarsi che nessun altro thread richiami metodi sul vettore simultaneo quando si chiama questo metodo. La capacità del vettore simultaneo dopo che il metodo restituisce può essere maggiore della prenotazione richiesta.
resize
Modifica le dimensioni del vettore simultaneo in base alle dimensioni richieste, eliminando o aggiungendo elementi in base alle esigenze. Questo metodo non è sicuro per la concorrenza.
void resize(
size_type _N);
void resize(
size_type _N,
const T& val);
Parametri
_N
Nuova dimensione di concurrent_vector.
val
Valore di nuovi elementi aggiunti al vettore se la nuova dimensione è maggiore di quella originale. Se il valore viene omesso, ai nuovi oggetti viene assegnato il valore predefinito per il tipo.
Osservazioni:
Se le dimensioni del contenitore sono inferiori alle dimensioni richieste, gli elementi vengono aggiunti al vettore fino a raggiungere le dimensioni richieste. Se le dimensioni del contenitore sono maggiori delle dimensioni richieste, gli elementi più vicini alla fine del contenitore vengono eliminati fino a quando il contenitore non raggiunge le dimensioni _N
. Se la dimensione attuale del contenitore corrisponde a quella richiesta, non viene eseguita alcuna azione.
resize
non è sicuro per la concorrenza. È necessario assicurarsi che nessun altro thread richiami metodi sul vettore simultaneo quando si chiama questo metodo.
shrink_to_fit
Compatta la rappresentazione interna del vettore simultaneo per ridurre la frammentazione e ottimizzare l'utilizzo della memoria. Questo metodo non è sicuro per la concorrenza.
void shrink_to_fit();
Osservazioni:
Questo metodo riassegnare internamente gli elementi di spostamento della memoria, invalidando tutti gli iteratori. shrink_to_fit
non è indipendente dalla concorrenza. È necessario assicurarsi che nessun altro thread richiami metodi sul vettore simultaneo quando si chiama questa funzione.
size
Restituisce il numero di elementi nel vettore simultaneo. Questo metodo è indipendente dalla concorrenza.
size_type size() const;
Valore restituito
Numero di elementi in questo concurrent_vector
oggetto.
Osservazioni:
La dimensione restituita è garantita di includere tutti gli elementi aggiunti dalle chiamate alla funzione push_back
o le operazioni di aumento completate prima di richiamare questo metodo. Tuttavia, può anche includere elementi allocati ma ancora in fase di costruzione da chiamate simultanee a uno dei metodi di crescita.
scambio
Scambia il contenuto di due vettori simultanei. Questo metodo non è sicuro per la concorrenza.
void swap(concurrent_vector& _Vector);
Parametri
_Vettore
Oggetto concurrent_vector
con cui scambiare il contenuto.