Compartilhar via


Classe concurrent_vector

A classe concurrent_vector é uma classe de contêiner de sequência que permite acesso aleatório a qualquer elemento. Ela habilita o acréscimo concurrency-safe, o acesso ao elemento, o acesso ao iterador e as operações de passagem do iterador. Aqui, concurrency-safe significa que os ponteiros ou iteradores são sempre válidos. Não é uma garantia de inicialização do elemento ou de uma ordem de passagem específica.

Sintaxe

template<typename T, class _Ax>
class concurrent_vector: protected details::_Allocator_base<T,
    _Ax>,
private details::_Concurrent_vector_base_v4;

Parâmetros

T
O tipo de dados dos elementos a serem armazenados no vetor.

_Ax
O tipo que representa o objeto alocador armazenado que encapsula detalhes sobre a alocação e a desalocação de memória do vetor simultâneo. Esse argumento é opcional e o valor padrão é allocator<T>.

Membros

Typedefs públicos

Nome Descrição
allocator_type Um tipo que representa a classe do alocador para o vetor simultâneo.
const_iterator Um tipo que fornece um iterador de acesso aleatório que pode ler um elemento const em um vetor simultâneo.
const_pointer Um tipo que fornece um ponteiro para um elemento const em um vetor simultâneo.
const_reference Um tipo que fornece uma referência para um elemento const armazenado em um vetor simultâneo para leitura e execução de operações const.
const_reverse_iterator Um tipo que fornece um iterador de acesso aleatório que pode ler qualquer elemento const no vetor simultâneo.
difference_type Um tipo que fornece a distância com sinal entre dois elementos em um vetor simultâneo.
iterator Um tipo que fornece um iterador de acesso aleatório que pode ler qualquer elemento em um vetor simultâneo. A modificação de um elemento usando o iterador não é concurrency-safe.
pointer Um tipo que fornece um ponteiro para um elemento em um vetor simultâneo.
reference Um tipo que fornece uma referência a um elemento armazenado em um vetor simultâneo.
reverse_iterator Um tipo que fornece um iterador de acesso aleatório que pode ler qualquer elemento em um vetor simultâneo reverso. A modificação de um elemento usando o iterador não é concurrency-safe.
size_type Um tipo que conta o número de elementos em um vetor simultâneo.
value_type Um tipo que representa o tipo de dados armazenados em um vetor simultâneo.

Construtores públicos

Nome Descrição
concurrent_vector Sobrecarregado. Constrói um vetor simultâneo.
Destruidor ~concurrent_vector Apaga todos os elementos e destrói esse vetor simultâneo.

Métodos públicos

Nome Descrição
assign Sobrecarregado. Apaga os elementos do vetor simultâneo e atribui a ele _N cópias do _Item ou os valores especificados pelo intervalo de iterador (_Begin, _End). Esse método não é seguro para simultaneidade.
at Sobrecarregado. Fornece acesso ao elemento no índice fornecido no vetor simultâneo. Esse método é concurrency-safe para operações de leitura e, ao mesmo tempo, também aumenta o vetor, desde que você tenha garantido que o valor _Index seja menor que o tamanho do vetor simultâneo.
back Sobrecarregado. Retorna uma referência ou uma referência const ao último elemento no vetor simultâneo. Se o vetor simultâneo estiver vazio, o valor retornado será indefinido. Esse método é seguro para simultaneidade.
begin Sobrecarregado. Retorna um iterador de tipo iterator ou const_iterator para o início do vetor simultâneo. Esse método é seguro para simultaneidade.
capacidade Retorna o tamanho máximo para o qual o vetor simultâneo pode aumentar, sem precisar alocar mais memória. Esse método é seguro para simultaneidade.
cbegin Retorna um iterador de tipo const_iterator para o início do vetor simultâneo. Esse método é seguro para simultaneidade.
cend Retorna um iterador de tipo const_iterator para o final do vetor simultâneo. Esse método é seguro para simultaneidade.
clear Apaga todos os elementos no vetor simultâneo. Esse método não é seguro para simultaneidade.
crbegin Retorna um iterador de tipo const_reverse_iterator para o início do vetor simultâneo. Esse método é seguro para simultaneidade.
crend Retorna um iterador de tipo const_reverse_iterator para o final do vetor simultâneo. Esse método é seguro para simultaneidade.
empty Testa se o vetor simultâneo está vazio no momento em que esse método é chamado. Esse método é seguro para simultaneidade.
end Sobrecarregado. Retorna um iterador de tipo iterator ou const_iterator para o final do vetor simultâneo. Esse método é seguro para simultaneidade.
front Sobrecarregado. Retorna uma referência ou uma referência const ao primeiro elemento no vetor simultâneo. Se o vetor simultâneo estiver vazio, o valor retornado será indefinido. Esse método é seguro para simultaneidade.
get_allocator Retorna uma cópia do alocador usado para construir o vetor simultâneo. Esse método é seguro para simultaneidade.
grow_by Sobrecarregado. Aumenta esse vetor simultâneo em _Delta elementos. Esse método é seguro para simultaneidade.
grow_to_at_least Aumenta esse vetor simultâneo até que ele tenha pelo menos _N elementos. Esse método é seguro para simultaneidade.
max_size Retorna o número máximo de elementos que o vetor simultâneo pode conter. Esse método é seguro para simultaneidade.
push_back Sobrecarregado. Acrescenta o item determinado para o final do vetor simultâneo. Esse método é seguro para simultaneidade.
rbegin Sobrecarregado. Retorna um iterador de tipo reverse_iterator ou const_reverse_iterator para o início do vetor simultâneo. Esse método é seguro para simultaneidade.
rend Sobrecarregado. Retorna um iterador de tipo reverse_iterator ou const_reverse_iterator para o final do vetor simultâneo. Esse método é seguro para simultaneidade.
reserve Aloca espaço suficiente para aumentar o vetor simultâneo para o tamanho _N, sem precisar alocar mais memória posteriormente. Esse método não é seguro para simultaneidade.
resize Sobrecarregado. Altera o tamanho do vetor simultâneo para o tamanho solicitado, excluindo ou adicionando elementos, conforme necessário. Esse método não é seguro para simultaneidade.
shrink_to_fit Compacta a representação interna do vetor simultâneo para reduzir a fragmentação e otimizar o uso da memória. Esse método não é seguro para simultaneidade.
size Retorna o número de elementos no vetor simultâneo. Esse método é seguro para simultaneidade.
troca Troca o conteúdo de dois vetores simultâneos. Esse método não é seguro para simultaneidade.

Operadores públicos

Nome Descrição
operador Sobrecarregado. Fornece acesso ao elemento no índice fornecido no vetor simultâneo. Esse método é concurrency-safe para operações de leitura e, ao mesmo tempo, também aumenta o vetor, desde que você tenha garantido que o valor _Index seja menor que o tamanho do vetor simultâneo.
operator= Sobrecarregado. Atribui o conteúdo de outro objeto concurrent_vector a este. Esse método não é seguro para simultaneidade.

Comentários

Para obter informações detalhadas sobre a classe concurrent_vector, confira Contêineres e objetos paralelos.

Hierarquia de herança

_Concurrent_vector_base_v4

_Allocator_base

concurrent_vector

Requisitos

Cabeçalho: concurrent_vector.h

Namespace: concurrency

assign

Apaga os elementos do vetor simultâneo e atribui a ele _N cópias do _Item ou os valores especificados pelo intervalo de iterador (_Begin, _End). Esse método não é seguro para simultaneidade.

void assign(
    size_type _N,
    const_reference _Item);

template<class _InputIterator>
void assign(_InputIterator _Begin,
    _InputIterator _End);

Parâmetros

_InputIterator
O tipo do iterador especificado.

_N
O número de itens a serem copiados para o vetor simultâneo.

_Item
Referência a um valor usado para preencher o vetor simultâneo.

_Begin
Um iterador para o primeiro elemento do intervalo de origem.

_End
Um iterador para um elemento após o último no intervalo de origem.

Comentários

assign não é concurrency-safe. Você deve garantir que outros threads não invoquem os métodos no vetor simultâneo, ao chamar esse método.

at

Fornece acesso ao elemento no índice fornecido no vetor simultâneo. Esse método é concurrency-safe para operações de leitura e, ao mesmo tempo, também aumenta o vetor, desde que você tenha garantido que o valor _Index seja menor que o tamanho do vetor simultâneo.

reference at(size_type _Index);

const_reference at(size_type _Index) const;

Parâmetros

_Index
O índice do elemento a ser recuperado.

Valor de retorno

Uma referência ao item no índice fornecido.

Comentários

Não é possível usar a versão da função at que retorna uma referência não const para gravar simultaneamente no elemento a partir de threads diferentes. Um objeto de sincronização diferente deve ser usado para sincronizar operações simultâneas de leitura e gravação com o mesmo elemento de dados.

O método gera out_of_range, se _Index for maior que ou igual ao tamanho do vetor simultâneo, e range_error, se o índice for para uma parte interrompida do vetor. Para obter detalhes sobre como um vetor pode ser interrompido, confira Contêineres e Objetos Paralelos.

voltar

Retorna uma referência ou uma referência const ao último elemento no vetor simultâneo. Se o vetor simultâneo estiver vazio, o valor retornado será indefinido. Esse método é seguro para simultaneidade.

reference back();

const_reference back() const;

Valor de retorno

Uma referência ou uma referência const ao último elemento no vetor simultâneo.

begin

Retorna um iterador de tipo iterator ou const_iterator para o início do vetor simultâneo. Esse método é seguro para simultaneidade.

iterator begin();

const_iterator begin() const;

Valor de retorno

Um iterador de tipo iterator ou const_iterator para o início do vetor simultâneo.

capacidade

Retorna o tamanho máximo para o qual o vetor simultâneo pode aumentar, sem precisar alocar mais memória. Esse método é seguro para simultaneidade.

size_type capacity() const;

Valor de retorno

O tamanho máximo para o qual o vetor simultâneo pode aumentar, sem precisar alocar mais memória.

Comentários

Ao contrário de uma Biblioteca Standard C++ vector, um objeto concurrent_vector não moverá os elementos existentes, se alocar mais memória.

cbegin

Retorna um iterador de tipo const_iterator para o início do vetor simultâneo. Esse método é seguro para simultaneidade.

const_iterator cbegin() const;

Valor de retorno

Um iterador de tipo const_iterator para o início do vetor simultâneo.

cend

Retorna um iterador de tipo const_iterator para o final do vetor simultâneo. Esse método é seguro para simultaneidade.

const_iterator cend() const;

Valor de retorno

Um iterador de tipo const_iterator para o final do vetor simultâneo.

clear

Apaga todos os elementos no vetor simultâneo. Esse método não é seguro para simultaneidade.

void clear();

Comentários

clear não é concurrency-safe. Você deve garantir que outros threads não invoquem os métodos no vetor simultâneo, ao chamar esse método. clear não libera as matrizes internas. Para liberar as matrizes internas, chame a função shrink_to_fit após clear.

concurrent_vector

Constrói um vetor 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
O tipo de alocador do vetor de origem.

_InputIterator
O tipo do iterador de entrada.

_Al
A classe de alocador a ser usada com esse objeto.

_Vector
O objeto concurrent_vector de origem do qual copiar ou mover elementos.

_N
A capacidade inicial do objeto concurrent_vector.

_Item
O valor dos elementos no objeto construído.

_Begin
A posição do primeiro elemento no intervalo de elementos a ser copiado.

_End
A posição do primeiro elemento após o intervalo de elementos a ser copiado.

Comentários

Todos os construtores armazenam um objeto alocador _Al e iniciam o vetor.

O primeiro construtor especifica um vetor inicial vazio e especifica explicitamente o tipo de alocador. a ser usado.

O segundo e o terceiro construtores especificam uma cópia do vetor simultâneo _Vector.

O quarto construtor especifica uma movimentação do vetor simultâneo _Vector.

O quinto construtor especifica uma repetição de um número especificado (_N) de elementos do valor padrão para a classe T.

O sexto construtor especifica uma repetição de elementos (_N) de valor _Item.

O último construtor especifica valores fornecidos pelo intervalo do iterador (_Begin, _End).

~ concurrent_vector

Apaga todos os elementos e destrói esse vetor simultâneo.

~concurrent_vector();

crbegin

Retorna um iterador de tipo const_reverse_iterator para o início do vetor simultâneo. Esse método é seguro para simultaneidade.

const_reverse_iterator crbegin() const;

Valor de retorno

Um iterador de tipo const_reverse_iterator para o início do vetor simultâneo.

crend

Retorna um iterador de tipo const_reverse_iterator para o final do vetor simultâneo. Esse método é seguro para simultaneidade.

const_reverse_iterator crend() const;

Valor de retorno

Um iterador de tipo const_reverse_iterator para o final do vetor simultâneo.

empty

Testa se o vetor simultâneo está vazio no momento em que esse método é chamado. Esse método é seguro para simultaneidade.

bool empty() const;

Valor de retorno

true, se o vetor estava vazio no momento em que a função foi chamada. Caso contrário, false.

end

Retorna um iterador de tipo iterator ou const_iterator para o final do vetor simultâneo. Esse método é seguro para simultaneidade.

iterator end();

const_iterator end() const;

Valor de retorno

Um iterador de tipo iterator ou const_iterator para o final do vetor simultâneo.

front

Retorna uma referência ou uma referência const ao primeiro elemento no vetor simultâneo. Se o vetor simultâneo estiver vazio, o valor retornado será indefinido. Esse método é seguro para simultaneidade.

reference front();

const_reference front() const;

Valor de retorno

Uma referência ou uma referência const ao primeiro elemento no vetor simultâneo.

get_allocator

Retorna uma cópia do alocador usado para construir o vetor simultâneo. Esse método é seguro para simultaneidade.

allocator_type get_allocator() const;

Valor de retorno

Uma cópia do alocador usado para construir o objeto concurrent_vector.

grow_by

Aumenta esse vetor simultâneo em _Delta elementos. Esse método é seguro para simultaneidade.

iterator grow_by(
    size_type _Delta);

iterator grow_by(
    size_type _Delta,
    const_reference _Item);

Parâmetros

_Delta
O número de elementos a serem acrescentados ao objeto.

_Item
O valor com o qual os novos elementos devem ser inicializados.

Valor de retorno

Um iterador para o primeiro item acrescentado.

Comentários

Se _Item não for especificado, os novos elementos serão construídos por padrão.

grow_to_at_least

Aumenta esse vetor simultâneo até que ele tenha pelo menos _N elementos. Esse método é seguro para simultaneidade.

iterator grow_to_at_least(size_type _N);

Parâmetros

_N
O novo tamanho mínimo para o objeto concurrent_vector.

Valor de retorno

Um iterador que aponta para o início da sequência acrescentada ou para o elemento no índice _N, se nenhum elemento tiver sido acrescentado.

max_size

Retorna o número máximo de elementos que o vetor simultâneo pode conter. Esse método é seguro para simultaneidade.

size_type max_size() const;

Valor de retorno

O número máximo de elementos que o objeto concurrent_vector pode conter.

operator=

Atribui o conteúdo de outro objeto concurrent_vector a este. Esse método não é seguro para simultaneidade.

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
O tipo de alocador do vetor de origem.

_Vector
O objeto de origem concurrent_vector .

Valor de retorno

Uma referência a esse objeto concurrent_vector.

operador

Fornece acesso ao elemento no índice fornecido no vetor simultâneo. Esse método é concurrency-safe para operações de leitura e, ao mesmo tempo, também aumenta o vetor, desde que você tenha garantido que o valor _Index seja menor que o tamanho do vetor simultâneo.

reference operator[](size_type _index);

const_reference operator[](size_type _index) const;

Parâmetros

_Index
O índice do elemento a ser recuperado.

Valor de retorno

Uma referência ao item no índice fornecido.

Comentários

Não é possível usar a versão de operator [] que retorna uma referência não const para gravar simultaneamente no elemento a partir de threads diferentes. Um objeto de sincronização diferente deve ser usado para sincronizar operações simultâneas de leitura e gravação com o mesmo elemento de dados.

Nenhuma verificação de limites é executada para garantir que _Index seja um índice válido no vetor simultâneo.

push_back

Acrescenta o item determinado para o final do vetor simultâneo. Esse método é seguro para simultaneidade.

iterator push_back(const_reference _Item);

iterator push_back(T&& _Item);

Parâmetros

_Item
O valor a ser acrescentado.

Valor de retorno

Um iterador para o item acrescentado.

rbegin

Retorna um iterador de tipo reverse_iterator ou const_reverse_iterator para o início do vetor simultâneo. Esse método é seguro para simultaneidade.

reverse_iterator rbegin();

const_reverse_iterator rbegin() const;

Valor de retorno

Um iterador de tipo reverse_iterator ou const_reverse_iterator para o início do vetor simultâneo.

rend

Retorna um iterador de tipo reverse_iterator ou const_reverse_iterator para o final do vetor simultâneo. Esse método é seguro para simultaneidade.

reverse_iterator rend();

const_reverse_iterator rend() const;

Valor de retorno

Um iterador de tipo reverse_iterator ou const_reverse_iterator para o final do vetor simultâneo.

reserve

Aloca espaço suficiente para aumentar o vetor simultâneo para o tamanho _N, sem precisar alocar mais memória posteriormente. Esse método não é seguro para simultaneidade.

void reserve(size_type _N);

Parâmetros

_N
O número de elementos para os quais o espaço deve ser reservado.

Comentários

reserve não é concurrency-safe. Você deve garantir que outros threads não invoquem os métodos no vetor simultâneo, ao chamar esse método. A capacidade do vetor simultâneo após o retorno do método pode ser maior do que a reserva solicitada.

redimensionar

Altera o tamanho do vetor simultâneo para o tamanho solicitado, excluindo ou adicionando elementos, conforme necessário. Esse método não é seguro para simultaneidade.

void resize(
    size_type _N);

void resize(
    size_type _N,
    const T& val);

Parâmetros

_N
O novo tamanho do concurrent_vector.

val
O valor de novos elementos adicionados ao vetor, caso o novo tamanho seja maior que o tamanho original. Se o valor for omitido, os novos objetos receberão o valor padrão para o tipo.

Comentários

Se o tamanho do contêiner for menor que o tamanho solicitado, serão adicionados os elementos ao vetor até que ele atinja o tamanho solicitado. Se o tamanho do contêiner for maior que o tamanho solicitado, os elementos mais próximos do final do contêiner são excluídos até o contêiner chegar ao tamanho _N. Se o tamanho atual do contêiner for igual ao tamanho solicitado, nenhuma ação será realizada.

resize não é concurrency-safe. Você deve garantir que outros threads não invoquem os métodos no vetor simultâneo, ao chamar esse método.

shrink_to_fit

Compacta a representação interna do vetor simultâneo para reduzir a fragmentação e otimizar o uso da memória. Esse método não é seguro para simultaneidade.

void shrink_to_fit();

Comentários

Esse método alocará internamente os elementos de movimentação de memória, invalidando todos os iteradores. shrink_to_fit não é concurrency-safe. Você deve garantir que outros threads não invoquem os métodos no vetor simultâneo, ao chamar essa função.

tamanho

Retorna o número de elementos no vetor simultâneo. Esse método é seguro para simultaneidade.

size_type size() const;

Valor de retorno

O número de elementos no objeto concurrent_vector.

Comentários

O tamanho retornado é garantido para incluir todos os elementos acrescentados por chamadas à função push_back ou as operações de crescimento que foram concluídas antes de invocar esse método. No entanto, também pode incluir elementos alocados, mas ainda em construção por chamadas simultâneas a qualquer um dos métodos de crescimento.

troca

Troca o conteúdo de dois vetores simultâneos. Esse método não é seguro para simultaneidade.

void swap(concurrent_vector& _Vector);

Parâmetros

_Vector
O objeto concurrent_vector com o qual trocar conteúdo.

Confira também

Namespace de simultaneidade
Contêineres e objetos em paralelo