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