Clase concurrent_vector
La clase concurrent_vector
es una clase de contenedor de secuencia que permite el acceso aleatorio a cualquier elemento. Habilita las operaciones de anexión segura para simultaneidad, acceso de elemento, acceso de iterador e iterador transversal. Aquí, seguro para la simultaneidad significa que los punteros e iteradores siempre son válidos. No es una garantía de inicialización de elementos ni de un orden transversal determinado.
Sintaxis
template<typename T, class _Ax>
class concurrent_vector: protected details::_Allocator_base<T,
_Ax>,
private details::_Concurrent_vector_base_v4;
Parámetros
T
Tipo de los elementos que se van a almacenar en la colección.
_Ax
El tipo que representa el objeto de asignador almacenado que encapsula los detalles acerca de la asignación y desasignación de memoria para el vector simultáneo. Este argumento es opcional y el valor predeterminado es allocator<T>
.
Miembros
Definiciones de tipos públicas
Nombre | Descripción |
---|---|
allocator_type |
Tipo que representa la clase de asignador para el objeto de vector. |
const_iterator |
Tipo que proporciona un iterador de acceso aleatorio que puede leer un elemento const en un vector. |
const_pointer |
Tipo que proporciona un puntero a un elemento const en un vector. |
const_reference |
Tipo que proporciona una referencia a un elemento const almacenado en un vector para leer y realizar operaciones const . |
const_reverse_iterator |
Tipo que proporciona un iterador de acceso aleatorio que puede leer cualquier elemento const en el vector. |
difference_type |
Tipo que proporciona la distancia firmada entre dos elementos en un vector simultáneo. |
iterator |
Tipo que proporciona un iterador de acceso aleatorio que puede leer cualquier elemento en un vector simultáneo. La modificación de un elemento mediante el iterador no es seguro para la simultaneidad. |
pointer |
Tipo que proporciona un puntero a un elemento en un vector. |
reference |
Tipo que proporciona una referencia a un elemento almacenado en un vector. |
reverse_iterator |
Tipo que proporciona un iterador de acceso aleatorio que puede leer cualquier elemento en un vector simultáneo. La modificación de un elemento mediante el iterador no es seguro para la simultaneidad. |
size_type |
Tipo que cuenta el número de elementos en un vector simultáneo. |
value_type |
Tipo que representa el tipo de datos almacenado en un vector simultáneo. |
Constructores públicos
Nombre | Descripción |
---|---|
concurrent_vector | Con sobrecarga. Construye un vector simultáneo. |
~concurrent_vector Destructor | Borra todos los elementos y destruye este vector simultáneo. |
Métodos públicos
Nombre | Descripción |
---|---|
assign | Con sobrecarga. Borra los elementos del vector simultáneo y le asigna _N copias de _Item , o valores especificados por el intervalo de iterador [ _Begin , _End ). Este método no es seguro para la simultaneidad. |
at | Con sobrecarga. Proporciona acceso al elemento en el índice especificado en el vector simultáneo. Este método es seguro para la simultaneidad para las operaciones de lectura y, al mismo tiempo, aumenta el vector, siempre y cuando haya asegurado que el valor _Index es menor que el tamaño del vector simultáneo. |
back | Con sobrecarga. Devuelve una referencia o una const referencia al último elemento del vector simultáneo. Si el vector está vacío, el valor devuelto no está definido. Este método es seguro para simultaneidad. |
begin | Con sobrecarga. Devuelve un iterador de tipo iterator o const_iterator al principio del vector simultáneo. Este método es seguro para simultaneidad. |
capacidad | Devuelve el tamaño máximo al que puede crecer el vector simultáneo sin tener que asignar más memoria. Este método es seguro para simultaneidad. |
cbegin | Devuelve un iterador de tipo const_iterator al principio del vector simultáneo. Este método es seguro para simultaneidad. |
cend | Devuelve un iterador de tipo const_iterator al principio del vector simultáneo. Este método es seguro para simultaneidad. |
eliminar | Borra todos los elementos del vector simultáneo. Este método no es seguro para la simultaneidad. |
crbegin | Devuelve un iterador de tipo const_reverse_iterator al principio del vector simultáneo. Este método es seguro para simultaneidad. |
crend | Devuelve un iterador de tipo const_reverse_iterator al principio del vector simultáneo. Este método es seguro para simultaneidad. |
empty | Comprueba si el vector simultáneo está vacío en el momento en que se llama a este método. Este método es seguro para simultaneidad. |
end | Con sobrecarga. Devuelve un iterador de tipo iterator o const_iterator al principio del vector simultáneo. Este método es seguro para simultaneidad. |
front | Con sobrecarga. Devuelve una referencia o una const referencia al último elemento del vector simultáneo. Si el vector está vacío, el valor devuelto no está definido. Este método es seguro para simultaneidad. |
get_allocator | Devuelve una copia del objeto de asignador usado para construir el vector simultáneo. Este método es seguro para simultaneidad. |
grow_by | Con sobrecarga. Aumenta este vector simultáneo por _Delta elementos. Este método es seguro para simultaneidad. |
grow_to_at_least | Crece este vector simultáneo hasta que tiene al menos _N elementos. Este método es seguro para simultaneidad. |
max_size | Devuelve el número máximo de elementos que puede contener el vector simultáneo. Este método es seguro para simultaneidad. |
push_back | Con sobrecarga. Anexa el elemento especificado al final del vector simultáneo. Este método es seguro para simultaneidad. |
rbegin | Con sobrecarga. Devuelve un iterador de tipo reverse_iterator o const_reverse_iterator al principio del vector simultáneo. Este método es seguro para simultaneidad. |
rend | Con sobrecarga. Devuelve un iterador de tipo reverse_iterator o const_reverse_iterator al principio del vector simultáneo. Este método es seguro para simultaneidad. |
reserve | Asigna suficiente espacio para aumentar el tamaño _N del vector simultáneo sin tener que asignar más memoria más adelante. Este método no es seguro para la simultaneidad. |
resize | Con sobrecarga. Cambia el tamaño del vector simultáneo al tamaño solicitado, eliminando o agregando elementos según sea necesario. Este método no es seguro para la simultaneidad. |
shrink_to_fit | Compacta la representación interna del vector simultáneo para reducir la fragmentación y optimizar el uso de memoria. Este método no es seguro para la simultaneidad. |
size | Devuelve el número de elementos del objeto vector actual. Este método es seguro para simultaneidad. |
swap | Intercambia el contenido de dos contenedores. Este método no es seguro para la simultaneidad. |
Operadores públicos
Nombre | Descripción |
---|---|
operator[] | Con sobrecarga. Proporciona acceso al elemento en el índice especificado en el vector simultáneo. Este método es seguro para la simultaneidad para las operaciones de lectura y, al mismo tiempo, aumenta el vector, siempre y cuando haya asegurado que el valor _Index es menor que el tamaño del vector simultáneo. |
operator= | Con sobrecarga. Asigna el contenido de otro objeto concurrent_vector a este. Este método no es seguro para la simultaneidad. |
Comentarios
Para obtener más información acerca de la clase concurrent_vector
, consulte Contenedores y objetos paralelos.
Jerarquía de herencia
_Concurrent_vector_base_v4
_Allocator_base
concurrent_vector
Requisitos
Encabezado: concurrent_vector.h
Espacio de nombres: simultaneidad
asignar
Borra los elementos del vector simultáneo y le asigna _N
copias de _Item
, o valores especificados por el intervalo de iterador [ _Begin
, _End
). Este método no es seguro para la simultaneidad.
void assign(
size_type _N,
const_reference _Item);
template<class _InputIterator>
void assign(_InputIterator _Begin,
_InputIterator _End);
Parámetros
_InputIterator
Tipo del iterador especificado.
_N
Número de elementos que se van a copiar en el vector simultáneo.
_Item
Referencia a un valor usado para rellenar el vector simultáneo.
_Begin
Un iterador al primer elemento del rango.
_End
Iterador a un pasado el último elemento del intervalo de origen.
Comentarios
assign
no es seguro de simultaneidad. Debe asegurarse de que ningún otro subproceso invoca métodos en el vector simultáneo al llamar a este método.
at
Proporciona acceso al elemento en el índice especificado en el vector simultáneo. Este método es seguro para la simultaneidad para las operaciones de lectura y, al mismo tiempo, aumenta el vector, siempre y cuando haya asegurado que el valor _Index
es menor que el tamaño del vector simultáneo.
reference at(size_type _Index);
const_reference at(size_type _Index) const;
Parámetros
_Index
Índice del elemento al que se hará referencia.
Valor devuelto
Referencia al elemento en el índice especificado.
Comentarios
La versión de la función at
que devuelve una const
referencia no se puede usar para escribir simultáneamente en el elemento de diferentes subprocesos. Se debe usar un objeto de sincronización diferente para sincronizar las operaciones simultáneas de lectura y escritura en el mismo elemento de datos.
El método produce out_of_range
si _Index
es mayor o igual que el tamaño del vector simultáneo y range_error
si el índice es para una parte rota del vector. Para obtener más información sobre cómo se puede romper un vector, consulte Contenedores y objetos paralelos.
atrás
Devuelve una referencia o una const
referencia al último elemento del vector simultáneo. Si el vector está vacío, el valor devuelto no está definido. Este método es seguro para simultaneidad.
reference back();
const_reference back() const;
Valor devuelto
Devuelve una referencia o una const
referencia al último elemento del vector simultáneo.
begin
Devuelve un iterador de tipo iterator
o const_iterator
al principio del vector simultáneo. Este método es seguro para simultaneidad.
iterator begin();
const_iterator begin() const;
Valor devuelto
Devuelve un iterador de tipo iterator
o const_iterator
al principio del vector simultáneo.
capacidad
Devuelve el tamaño máximo al que puede crecer el vector simultáneo sin tener que asignar más memoria. Este método es seguro para simultaneidad.
size_type capacity() const;
Valor devuelto
Devuelve el tamaño máximo al que puede crecer el vector simultáneo sin tener que asignar más memoria.
Comentarios
A diferencia de una biblioteca estándar de C++ vector
, un objeto concurrent_vector
no mueve los elementos existentes si asigna más memoria.
cbegin
Devuelve un iterador de tipo const_iterator
al principio del vector simultáneo. Este método es seguro para simultaneidad.
const_iterator cbegin() const;
Valor devuelto
Devuelve un iterador de tipo const_iterator
al principio del vector simultáneo.
cend
Devuelve un iterador de tipo const_iterator
al principio del vector simultáneo. Este método es seguro para simultaneidad.
const_iterator cend() const;
Valor devuelto
Devuelve un iterador de tipo const_iterator
al principio del vector simultáneo.
eliminar
Borra todos los elementos del vector simultáneo. Este método no es seguro para la simultaneidad.
void clear();
Comentarios
clear
no es seguro de simultaneidad. Debe asegurarse de que ningún otro subproceso invoca métodos en el vector simultáneo al llamar a este método. clear
no libera matrices internas. Para liberar matrices internas, llame a la función shrink_to_fit
después de clear
.
concurrent_vector
Construye un vector simultáneo.
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());
Parámetros
M
El tipo de asignador del vector de origen.
_InputIterator
El tipo de iterador de entrada.
_Al
La clase de asignador que se usa con este objeto.
_Vector
El objeto de origen concurrent_vector
del que copiar o mover elementos.
_N
Capacidad inicial del objeto concurrent_vector
.
_Item
El valor de elementos en el objeto construido.
_Begin
Posición del primer elemento en el intervalo de elementos que se va a copiar.
_End
Posición del primer elemento más allá del intervalo de elementos que se va a copiar.
Comentarios
Todos los constructores almacenan un objeto de asignador _Al
e inicializan el vector.
El primer constructor especifica un vector inicial vacío y especifica explícitamente el tipo de asignador. que se va a utilizar.
El segundo y tercer constructor especifican una copia del vector simultáneo _Vector
.
El cuarto constructor especifica un movimiento del vector simultáneo _Vector
.
El quinto constructor especifica una repetición de un número especificado ( _N
) de elementos del valor predeterminado para la clase T
.
El sexto constructor especifica una repetición de elementos ( _N
) de valor _Item
.
El último constructor especifica los valores proporcionados por el intervalo de iterador [ _Begin
, _End
).
~concurrent_vector
Borra todos los elementos y destruye este vector simultáneo.
~concurrent_vector();
crbegin
Devuelve un iterador de tipo const_reverse_iterator
al principio del vector simultáneo. Este método es seguro para simultaneidad.
const_reverse_iterator crbegin() const;
Valor devuelto
Devuelve un iterador de tipo const_reverse_iterator
al principio del vector simultáneo.
crend
Devuelve un iterador de tipo const_reverse_iterator
al principio del vector simultáneo. Este método es seguro para simultaneidad.
const_reverse_iterator crend() const;
Valor devuelto
Devuelve un iterador de tipo const_reverse_iterator
al principio del vector simultáneo.
empty
Comprueba si el vector simultáneo está vacío en el momento en que se llama a este método. Este método es seguro para simultaneidad.
bool empty() const;
Valor devuelto
true
si el vector estaba vacío en el momento en que se llamó a la función; de lo contrario, false
.
end
Devuelve un iterador de tipo iterator
o const_iterator
al principio del vector simultáneo. Este método es seguro para simultaneidad.
iterator end();
const_iterator end() const;
Valor devuelto
Devuelve un iterador de tipo iterator
o const_iterator
al principio del vector simultáneo.
front
Devuelve una referencia o una const
referencia al último elemento del vector simultáneo. Si el vector está vacío, el valor devuelto no está definido. Este método es seguro para simultaneidad.
reference front();
const_reference front() const;
Valor devuelto
Devuelve una referencia o una const
referencia al último elemento del vector simultáneo.
get_allocator
Devuelve una copia del objeto de asignador usado para construir el vector simultáneo. Este método es seguro para simultaneidad.
allocator_type get_allocator() const;
Valor devuelto
Devuelve una copia del asignador usado para construir el objeto concurrent_vector
.
grow_by
Aumenta este vector simultáneo por _Delta
elementos. Este método es seguro para simultaneidad.
iterator grow_by(
size_type _Delta);
iterator grow_by(
size_type _Delta,
const_reference _Item);
Parámetros
_Delta
Número de elementos que se van a anexar al objeto.
_Item
Valor con el que inicializar los nuevos elementos.
Valor devuelto
Iterador al primer elemento anexado.
Comentarios
Si _Item
no se especifica, los nuevos elementos se construyen de forma predeterminada.
grow_to_at_least
Crece este vector simultáneo hasta que tiene al menos _N
elementos. Este método es seguro para simultaneidad.
iterator grow_to_at_least(size_type _N);
Parámetros
_N
Nuevo tamaño mínimo para el concurrent_vector
objeto.
Valor devuelto
Iterador que apunta al principio de la secuencia anexada o al elemento en el índice _N
si no se anexa ningún elemento.
max_size
Devuelve el número máximo de elementos que puede contener el vector simultáneo. Este método es seguro para simultaneidad.
size_type max_size() const;
Valor devuelto
Número máximo de elementos que puede contener el concurrent_vector
objeto.
operator=
Asigna el contenido de otro objeto concurrent_vector
a este. Este método no es seguro para la simultaneidad.
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);
Parámetros
M
El tipo de asignador del vector de origen.
_Vector
Objeto concurrent_vector
de origen.
Valor devuelto
La referencia a este objeto concurrent_vector
.
operator[]
Proporciona acceso al elemento en el índice especificado en el vector simultáneo. Este método es seguro para la simultaneidad para las operaciones de lectura y, al mismo tiempo, aumenta el vector, siempre y cuando haya asegurado que el valor _Index
es menor que el tamaño del vector simultáneo.
reference operator[](size_type _index);
const_reference operator[](size_type _index) const;
Parámetros
_Index
Índice del elemento al que se hará referencia.
Valor devuelto
Referencia al elemento en el índice especificado.
Comentarios
La versión de la función operator []
que devuelve una const
referencia no se puede usar para escribir simultáneamente en el elemento de diferentes subprocesos. Se debe usar un objeto de sincronización diferente para sincronizar las operaciones simultáneas de lectura y escritura en el mismo elemento de datos.
No se realiza ninguna comprobación de límites para asegurarse de que _Index
es un índice válido en el vector simultáneo.
push_back
Anexa el elemento especificado al final del vector simultáneo. Este método es seguro para simultaneidad.
iterator push_back(const_reference _Item);
iterator push_back(T&& _Item);
Parámetros
_Item
Valor que se va a anexar.
Valor devuelto
Iterador al elemento anexado.
rbegin
Devuelve un iterador de tipo reverse_iterator
o const_reverse_iterator
al principio del vector simultáneo. Este método es seguro para simultaneidad.
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
Valor devuelto
Devuelve un iterador de tipo reverse_iterator
o const_reverse_iterator
al principio del vector simultáneo.
rend
Devuelve un iterador de tipo reverse_iterator
o const_reverse_iterator
al principio del vector simultáneo. Este método es seguro para simultaneidad.
reverse_iterator rend();
const_reverse_iterator rend() const;
Valor devuelto
Devuelve un iterador de tipo reverse_iterator
o const_reverse_iterator
al principio del vector simultáneo.
reserva
Asigna suficiente espacio para aumentar el tamaño _N
del vector simultáneo sin tener que asignar más memoria más adelante. Este método no es seguro para la simultaneidad.
void reserve(size_type _N);
Parámetros
_N
Número de elementos para los que se preasigna espacio.
Comentarios
reserve
no es seguro de simultaneidad. Debe asegurarse de que ningún otro subproceso invoca métodos en el vector simultáneo al llamar a este método. La capacidad del vector simultáneo después de que el método devuelva puede ser mayor que la reserva solicitada.
resize
Cambia el tamaño del vector simultáneo al tamaño solicitado, eliminando o agregando elementos según sea necesario. Este método no es seguro para la simultaneidad.
void resize(
size_type _N);
void resize(
size_type _N,
const T& val);
Parámetros
_N
Nuevo tamaño del concurrent_vector.
val
El valor de elementos nuevos añadido al vector si el nuevo tamaño es mayor que el tamaño original. Si el valor se omite, a los nuevos elementos se les asigna el valor predeterminado para la clase.
Comentarios
Si el tamaño del contenedor es menor que el tamaño solicitado, se agregan elementos al vector hasta que alcanza el tamaño solicitado. Si el tamaño del contenedor es mayor que el tamaño solicitado, se eliminan los elementos más cercanos al final del contenedor hasta que este alcanza el tamaño _N
. Si el tamaño actual del contenedor es igual que el tamaño solicitado, no se lleva a cabo ninguna acción.
resize
no es seguro para la simultaneidad. Debe asegurarse de que ningún otro subproceso invoca métodos en el vector simultáneo al llamar a este método.
shrink_to_fit
Compacta la representación interna del vector simultáneo para reducir la fragmentación y optimizar el uso de memoria. Este método no es seguro para la simultaneidad.
void shrink_to_fit();
Comentarios
Este método volverá a asignar internamente elementos de movimiento de memoria, lo que invalidará todos los iteradores. shrink_to_fit
no es seguro de simultaneidad. Debe asegurarse de que ningún otro subproceso invoca métodos en el vector simultáneo al llamar a este método.
size
Devuelve el número de elementos del objeto vector actual. Este método es seguro para simultaneidad.
size_type size() const;
Valor devuelto
Número de elementos en este objeto concurrent_vector
.
Comentarios
Se garantiza que el tamaño devuelto incluya todos los elementos anexados mediante llamadas a la función push_back
, o las operaciones de crecimiento que se hayan completado antes de invocar este método. Sin embargo, también puede incluir elementos asignados pero aún en construcción mediante llamadas simultáneas a cualquiera de los métodos de crecimiento.
swap
Intercambia el contenido de dos contenedores. Este método no es seguro para la simultaneidad.
void swap(concurrent_vector& _Vector);
Parámetros
_Vector
Objeto concurrent_vector
con el que se va a intercambiar contenido.
Consulte también
concurrency (espacio de nombres)
Contenedores y objetos paralelos