Поделиться через


Класс concurrent_vector

Класс concurrent_vector представляет собой класс контейнера последовательности, обеспечивающий доступ к элементам в случайном порядке. Позволяет параллельно-безопасно выполнять операции присоединения, получения доступа к элементу, доступа к итератору и обхода итератора. Здесь указатели или итераторы всегда допустимы. Это не гарантия инициализации элементов или определенного порядка обхода.

Синтаксис

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

Параметры

T
Тип данных элементов, хранящихся в векторе.

_Топор
Тип, представляющий сохраненный объект распределителя, инкапсулирующий сведения о выделении и размещении памяти для параллельного вектора. Этот аргумент является необязательным, и значением по умолчанию является allocator<T>.

Участники

Общедоступные определения типов

Имя Описание
allocator_type Тип, представляющий класс распределителя для параллельного вектора.
const_iterator Тип, предоставляющий итератор случайного доступа, который может читать const элемент в параллельном векторе.
const_pointer Тип, предоставляющий указатель на const элемент в параллельном векторе.
const_reference Тип, предоставляющий ссылку на const элемент, хранящийся в параллельном векторе для чтения и выполнения const операций.
const_reverse_iterator Тип, предоставляющий итератор случайного доступа, который может считывать любой const элемент в параллельном векторе.
difference_type Тип, предоставляющий подписанное расстояние между двумя элементами в параллельном векторе.
iterator Тип, предоставляющий итератор случайного доступа, который может считывать любой элемент в параллельном векторе. Изменение элемента с помощью итератора не является безопасным для параллелизма.
pointer Тип, предоставляющий указатель на элемент в параллельном векторе.
reference Тип, предоставляющий ссылку на элемент, хранящийся в параллельном векторе.
reverse_iterator Тип, предоставляющий итератор случайного доступа, который может считывать любой элемент в обратном параллельном векторе. Изменение элемента с помощью итератора не является безопасным для параллелизма.
size_type Тип, который подсчитывает количество элементов в параллельном векторе.
value_type Тип, представляющий тип данных, хранящийся в параллельном векторе.

Открытые конструкторы

Имя Описание
concurrent_vector Перегружен. Создает параллельный вектор.
Деструктор ~concurrent_vector Удаляет все элементы и уничтожает этот параллельный вектор.

Открытые методы

Имя Описание
assign Перегружен. Удаляет элементы параллельного вектора и назначает ему _N копии _Itemили значения, указанные диапазоном итератора [ _Begin, ). _End Этот метод не является безопасным для параллелизма.
at Перегружен. Предоставляет доступ к элементу по заданному индексу в параллельном векторе. Этот метод является безопасным для операций чтения, а также растет вектор, если вы убедитесь, что значение _Index меньше размера параллельного вектора.
back Перегружен. Возвращает ссылку или const ссылку на последний элемент в параллельном векторе. Если одновременный вектор пуст, возвращаемое значение не определено. Этот метод является безопасным для параллелизма.
begin Перегружен. Возвращает итератор типа iterator или const_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма.
емкость Возвращает максимальный размер, к которому может увеличиваться одновременный вектор, не выделяется больше памяти. Этот метод является безопасным для параллелизма.
cbegin Возвращает итератор типа const_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма.
cend Возвращает итератор типа const_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма.
пусто Удаляет все элементы в параллельном векторе. Этот метод не является безопасным для параллелизма.
crbegin Возвращает итератор типа const_reverse_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма.
crend Возвращает итератор типа const_reverse_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма.
empty Проверяет, является ли одновременный вектор пустым во время вызова этого метода. Этот метод является безопасным для параллелизма.
end Перегружен. Возвращает итератор типа iterator или const_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма.
front Перегружен. Возвращает ссылку или const ссылку на первый элемент в параллельном векторе. Если одновременный вектор пуст, возвращаемое значение не определено. Этот метод является безопасным для параллелизма.
get_allocator Возвращает копию распределителя, используемую для создания параллельного вектора. Этот метод является безопасным для параллелизма.
grow_by Перегружен. Увеличивает этот параллельный вектор по _Delta элементам. Этот метод является безопасным для параллелизма.
grow_to_at_least Увеличивает этот параллельный вектор до тех пор, пока он не содержит по крайней мере _N элементы. Этот метод является безопасным для параллелизма.
max_size Возвращает максимальное количество элементов, которые может содержать одновременный вектор. Этот метод является безопасным для параллелизма.
push_back Перегружен. Добавляет заданный элемент в конец параллельного вектора. Этот метод является безопасным для параллелизма.
rbegin Перегружен. Возвращает итератор типа reverse_iterator или const_reverse_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма.
rend Перегружен. Возвращает итератор типа reverse_iterator или const_reverse_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма.
reserve Выделяет достаточно места для увеличения размера параллельного вектора _N без необходимости выделять больше памяти позже. Этот метод не является безопасным для параллелизма.
resize Перегружен. Изменяет размер параллельного вектора на запрошенный размер, удаление или добавление элементов по мере необходимости. Этот метод не является безопасным для параллелизма.
shrink_to_fit Сжимает внутреннее представление параллельного вектора для уменьшения фрагментации и оптимизации использования памяти. Этот метод не является безопасным для параллелизма.
size Возвращает количество элементов в параллельном векторе. Этот метод является безопасным для параллелизма.
swap Переключает содержимое двух параллельных векторов. Этот метод не является безопасным для параллелизма.

Открытые операторы

Имя Описание
оператор[] Перегружен. Предоставляет доступ к элементу по заданному индексу в параллельном векторе. Этот метод является безопасным для операций чтения, а также растет вектор, если значение _Index меньше размера параллельного вектора.
operator= Перегружен. Назначает содержимое другого concurrent_vector объекта этому объекту. Этот метод не является безопасным для параллелизма.

Замечания

Подробные сведения о классе см. в разделе "Параллельные concurrent_vector контейнеры и объекты".

Иерархия наследования

_Concurrent_vector_base_v4

_Allocator_base

concurrent_vector

Требования

Заголовок: concurrent_vector.h

Пространство имен: concurrency

назначить

Удаляет элементы параллельного вектора и назначает ему _N копии _Itemили значения, указанные диапазоном итератора [ _Begin, ). _End Этот метод не является безопасным для параллелизма.

void assign(
    size_type _N,
    const_reference _Item);

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

Параметры

_InputIterator
Тип указанного итератора.

_N
Количество элементов для копирования в параллельный вектор.

_Пункт
Ссылка на значение, используемое для заполнения параллельного вектора.

_Начинать
Итератор к первому элементу исходного диапазона.

_Конец
Итератор к одному последнему элементу исходного диапазона.

Замечания

assign не является безопасным для параллелизма. При вызове этого метода другие потоки не вызывают методы в параллельном векторе.

at

Предоставляет доступ к элементу по заданному индексу в параллельном векторе. Этот метод является безопасным для операций чтения, а также растет вектор, если вы убедитесь, что значение _Index меньше размера параллельного вектора.

reference at(size_type _Index);

const_reference at(size_type _Index) const;

Параметры

_Index
Индекс извлекаемого элемента.

Возвращаемое значение

Ссылка на элемент по указанному индексу.

Замечания

Версия функции at , возвращающей const не ссылку, не может использоваться для параллельной записи в элемент из разных потоков. Другой объект синхронизации должен использоваться для синхронизации параллельных операций чтения и записи с тем же элементом данных.

Метод вызывает out_of_range исключение, если _Index больше или равно размеру параллельного вектора, и range_error если индекс предназначен для разбитой части вектора. Дополнительные сведения о том, как вектор может стать неисправным, см. в разделе "Параллельные контейнеры и объекты".

назад

Возвращает ссылку или const ссылку на последний элемент в параллельном векторе. Если одновременный вектор пуст, возвращаемое значение не определено. Этот метод является безопасным для параллелизма.

reference back();

const_reference back() const;

Возвращаемое значение

Ссылка или const ссылка на последний элемент в параллельном векторе.

begin

Возвращает итератор типа iterator или const_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма.

iterator begin();

const_iterator begin() const;

Возвращаемое значение

Итератор типа iterator или const_iterator начала параллельного вектора.

Емкость

Возвращает максимальный размер, к которому может увеличиваться одновременный вектор, не выделяется больше памяти. Этот метод является безопасным для параллелизма.

size_type capacity() const;

Возвращаемое значение

Максимальный размер, до которого может расти параллельный вектор без необходимости выделения дополнительной памяти.

Замечания

В отличие от стандартной библиотеки vectorconcurrent_vector C++ объект не перемещает существующие элементы, если он выделяет больше памяти.

cbegin

Возвращает итератор типа const_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма.

const_iterator cbegin() const;

Возвращаемое значение

Итератор типа const_iterator к началу параллельного вектора.

cend

Возвращает итератор типа const_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма.

const_iterator cend() const;

Возвращаемое значение

Итератор типа const_iterator до конца параллельного вектора.

clear

Удаляет все элементы в параллельном векторе. Этот метод не является безопасным для параллелизма.

void clear();

Замечания

clear не является безопасным для параллелизма. При вызове этого метода другие потоки не вызывают методы в параллельном векторе. clear не освобождает внутренние массивы. Чтобы освободить внутренние массивы, вызовите функцию shrink_to_fit после clear.

concurrent_vector

Создает параллельный вектор.

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());

Параметры

M
Тип распределителя исходного вектора.

_InputIterator
Тип итератора ввода.

_Аль
Класс распределителя для использования с данным объектом.

_Вектор
Исходный объект concurrent_vector для копирования или перемещения элементов.

_N
Начальная производительность объекта concurrent_vector.

_Пункт
Значение элементов в созданном объекте.

_Начинать
Положение первого элемента в диапазоне копируемых элементов.

_Конец
Положение первого элемента за пределами диапазона копируемых элементов.

Замечания

Все конструкторы хранят объект _Al распределителя и инициализировать вектор.

Первый конструктор задает пустой исходный вектор и явно указывает тип распределителя. для использования.

Второй и третий конструкторы указывают копию параллельного вектора _Vector.

Четвертый конструктор определяет перемещение параллельного вектора _Vector.

Пятый конструктор задает повторение указанного числа ( _N) элементов значения по умолчанию для класса T.

Шестой конструктор указывает повторение _N() элементов значения _Item.

Последний конструктор задает значения, предоставленные диапазоном итератора [ _Begin, ). _End

~concurrent_vector

Удаляет все элементы и уничтожает этот параллельный вектор.

~concurrent_vector();

crbegin

Возвращает итератор типа const_reverse_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма.

const_reverse_iterator crbegin() const;

Возвращаемое значение

Итератор типа const_reverse_iterator к началу параллельного вектора.

crend

Возвращает итератор типа const_reverse_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма.

const_reverse_iterator crend() const;

Возвращаемое значение

Итератор типа const_reverse_iterator до конца параллельного вектора.

empty

Проверяет, является ли одновременный вектор пустым во время вызова этого метода. Этот метод является безопасным для параллелизма.

bool empty() const;

Возвращаемое значение

true Значение , если вектор был пустым в момент вызова функции, false в противном случае.

end

Возвращает итератор типа iterator или const_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма.

iterator end();

const_iterator end() const;

Возвращаемое значение

Итератор типа iterator или const_iterator конца параллельного вектора.

front

Возвращает ссылку или const ссылку на первый элемент в параллельном векторе. Если одновременный вектор пуст, возвращаемое значение не определено. Этот метод является безопасным для параллелизма.

reference front();

const_reference front() const;

Возвращаемое значение

Ссылка или const ссылка на первый элемент в параллельном векторе.

get_allocator

Возвращает копию распределителя, используемую для создания параллельного вектора. Этот метод является безопасным для параллелизма.

allocator_type get_allocator() const;

Возвращаемое значение

Копия распределителя, используемая для создания concurrent_vector объекта.

grow_by

Увеличивает этот параллельный вектор по _Delta элементам. Этот метод является безопасным для параллелизма.

iterator grow_by(
    size_type _Delta);

iterator grow_by(
    size_type _Delta,
    const_reference _Item);

Параметры

_Дельта
Количество элементов, добавляемых к объекту.

_Пункт
Значение для инициализации новых элементов.

Возвращаемое значение

Итератор для первого добавленного элемента.

Замечания

Если _Item это не указано, новые элементы создаются по умолчанию.

grow_to_at_least

Увеличивает этот параллельный вектор до тех пор, пока он не содержит по крайней мере _N элементы. Этот метод является безопасным для параллелизма.

iterator grow_to_at_least(size_type _N);

Параметры

_N
Новый минимальный размер объекта concurrent_vector .

Возвращаемое значение

Итератор, указывающий на начало добавленной последовательности или элемент в индексе _N , если элементы не были добавлены.

max_size

Возвращает максимальное количество элементов, которые может содержать одновременный вектор. Этот метод является безопасным для параллелизма.

size_type max_size() const;

Возвращаемое значение

Максимальное количество элементов, которые concurrent_vector может хранить объект.

operator=

Назначает содержимое другого concurrent_vector объекта этому объекту. Этот метод не является безопасным для параллелизма.

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);

Параметры

M
Тип распределителя исходного вектора.

_Вектор
Исходный объект concurrent_vector.

Возвращаемое значение

Ссылка на этот concurrent_vector объект.

оператор[]

Предоставляет доступ к элементу по заданному индексу в параллельном векторе. Этот метод является безопасным для операций чтения, а также растет вектор, если значение _Index меньше размера параллельного вектора.

reference operator[](size_type _index);

const_reference operator[](size_type _index) const;

Параметры

_Index
Индекс извлекаемого элемента.

Возвращаемое значение

Ссылка на элемент по указанному индексу.

Замечания

Версия operator [] , возвращающая не ссылку const , не может использоваться для параллельной записи в элемент из разных потоков. Другой объект синхронизации должен использоваться для синхронизации параллельных операций чтения и записи с тем же элементом данных.

Проверка границ не выполняется, чтобы убедиться, что _Index является допустимым индексом в одновременный вектор.

push_back

Добавляет заданный элемент в конец параллельного вектора. Этот метод является безопасным для параллелизма.

iterator push_back(const_reference _Item);

iterator push_back(T&& _Item);

Параметры

_Пункт
Добавляемое значение.

Возвращаемое значение

Итератор для добавленного элемента.

rbegin

Возвращает итератор типа reverse_iterator или const_reverse_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма.

reverse_iterator rbegin();

const_reverse_iterator rbegin() const;

Возвращаемое значение

Итератор типа reverse_iterator или const_reverse_iterator начала параллельного вектора.

rend

Возвращает итератор типа reverse_iterator или const_reverse_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма.

reverse_iterator rend();

const_reverse_iterator rend() const;

Возвращаемое значение

Итератор типа reverse_iterator или const_reverse_iterator конца параллельного вектора.

резерв

Выделяет достаточно места для увеличения размера параллельного вектора _N без необходимости выделять больше памяти позже. Этот метод не является безопасным для параллелизма.

void reserve(size_type _N);

Параметры

_N
Количество элементов, для которых требуется зарезервировать пространство.

Замечания

reserve не является безопасным для параллелизма. При вызове этого метода другие потоки не вызывают методы в параллельном векторе. Емкость параллельного вектора после возврата метода может быть больше запрошенного резервирования.

изменить размер

Изменяет размер параллельного вектора на запрошенный размер, удаление или добавление элементов по мере необходимости. Этот метод не является безопасным для параллелизма.

void resize(
    size_type _N);

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

Параметры

_N
Новый размер concurrent_vector.

Val
Значение новых элементов, добавленных в вектор, если новый размер больше исходного. Если значение опущено, новые объекты назначаются значения по умолчанию для их типа.

Замечания

Если размер контейнера меньше запрошенного размера, элементы добавляются в вектор, пока он не достигнет запрошенного размера. Если размер контейнера превышает запрошенный размер, элементы, ближайшие к концу контейнера, удаляются до тех пор, пока контейнер не достигнет размера _N. Если текущий размер контейнера совпадает с запрошенным, никакие действия не выполняются.

resize не является безопасным для параллелизма. При вызове этого метода другие потоки не вызывают методы в параллельном векторе.

shrink_to_fit

Сжимает внутреннее представление параллельного вектора для уменьшения фрагментации и оптимизации использования памяти. Этот метод не является безопасным для параллелизма.

void shrink_to_fit();

Замечания

Этот метод будет внутренне повторно выделять элементы перемещения памяти, недействив все итераторы. shrink_to_fit не является безопасным для параллелизма. При вызове этой функции другие потоки не вызывают методы в параллельном векторе.

size

Возвращает количество элементов в параллельном векторе. Этот метод является безопасным для параллелизма.

size_type size() const;

Возвращаемое значение

Количество элементов в этом concurrent_vector объекте.

Замечания

Возвращаемый размер гарантированно включает все элементы, добавленные вызовами функции push_back, или операции роста, выполненные до вызова этого метода. Однако он также может включать элементы, которые выделяются, но по-прежнему строятся одновременные вызовы любого из методов роста.

swap

Переключает содержимое двух параллельных векторов. Этот метод не является безопасным для параллелизма.

void swap(concurrent_vector& _Vector);

Параметры

_Вектор
Объект concurrent_vector для замены содержимого.

См. также

Пространство имен concurrency
Параллельные контейнеры и объекты