Класс 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
Тип данных элементов, которые должны храниться в векторе.

_Ax
Тип, представляющий сохраненный объект распределителя, который инкапсулирует сведения о выделении и освобождении памяти для параллельного вектора. Этот аргумент является необязательным, и значением по умолчанию является 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 Тип, представляющий тип данных, хранящийся в параллельном векторе.

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

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

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

name Описание
assign Перегружен. Стирает элементы параллельного вектора и присваивает ему либо _N копии _Item , либо значения, указанные в диапазоне итератора [ _Begin , _End ). Этот метод не является типобезопасным в режиме параллелизма.
at Перегружен. Предоставляет доступ к элементу по заданному индексу в параллельном векторе. Этот метод является типобезопасным для операций чтения, а также при увеличении вектора, пока вы уверены, что значение _Index меньше, чем размер параллельного вектора.
Назад Перегружен. Возвращает ссылку или const ссылку на последний элемент в параллельном векторе. Если параллельный вектор пуст, возвращаемое значение не определено. Этот метод является типобезопасным в режиме параллелизма.
начале Перегружен. Возвращает итератор типа iterator или const_iterator в начало параллельного вектора. Этот метод является типобезопасным в режиме параллелизма.
ресурсов Возвращает максимальный размер, до которого может увеличиваться параллельный вектор без выделения большего объема памяти. Этот метод является типобезопасным в режиме параллелизма.
cbegin Возвращает итератор типа const_iterator на начало параллельного вектора. Этот метод является типобезопасным в режиме параллелизма.
cend Возвращает итератор типа const_iterator на конец параллельного вектора. Этот метод является типобезопасным в режиме параллелизма.
пусто Стирает все элементы в параллельном векторе. Этот метод не является типобезопасным в режиме параллелизма.
crbegin Возвращает итератор типа const_reverse_iterator на начало параллельного вектора. Этот метод является типобезопасным в режиме параллелизма.
crend Возвращает итератор типа const_reverse_iterator на конец параллельного вектора. Этот метод является типобезопасным в режиме параллелизма.
empty Проверяет, является ли одновременный вектор пустым во время вызова этого метода. Этот метод является типобезопасным в режиме параллелизма.
end Перегружен. Возвращает итератор типа iterator или const_iterator в конец параллельного вектора. Этот метод является типобезопасным в режиме параллелизма.
крышку Перегружен. Возвращает ссылку или 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 в конец параллельного вектора. Этот метод является типобезопасным в режиме параллелизма.
предназначен Выделяет достаточно места для увеличения параллельного вектора до размера _N без необходимости выделять больше памяти позже. Этот метод не является типобезопасным в режиме параллелизма.
изменить размер Перегружен. Изменяет размер параллельного вектора на запрошенный размер, удаляя или добавляя элементы при необходимости. Этот метод не является типобезопасным в режиме параллелизма.
shrink_to_fit Сжимает внутреннее представление параллельного вектора, чтобы снизить фрагментацию и оптимизировать использование памяти. Этот метод не является типобезопасным в режиме параллелизма.
size Возвращает количество элементов в параллельном векторе. Этот метод является типобезопасным в режиме параллелизма.
позиции Меняет местами содержимое двух одновременных векторов. Этот метод не является типобезопасным в режиме параллелизма.

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

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

Комментарии

Подробные сведения о concurrent_vector классе см. в разделе Parallel Containers and Objects.

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

_Concurrent_vector_base_v4

_Allocator_base

concurrent_vector

Требования

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

Пространство имен: параллелизм

назначать

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

void assign(
    size_type _N,
    const_reference _Item);

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

Параметры

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

_N
Число элементов, копируемых в параллельный вектор.

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

_Begin
Итератор на первый элемент исходного диапазона.

_End
Итератор, который должен находиться за последним элементом исходного диапазона.

Комментарии

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

в

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

reference at(size_type _Index);

const_reference at(size_type _Index) const;

Параметры

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

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

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

Комментарии

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

Метод создает исключение, out_of_range Если _Index значение больше или равно размеру параллельного вектора, и range_error Если индекс предназначен для неработающей части вектора. Дополнительные сведения о том, как вектор может стать недействительным, см. в разделе Parallel Containers and Objects.

Назад

Возвращает ссылку или 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;

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

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

Комментарии

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

cbegin

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

const_iterator cbegin() const;

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

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

cend

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

const_iterator cend() const;

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

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

открытым

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

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
Тип итератора ввода.

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

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

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

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

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

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

Комментарии

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

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

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

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

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

Шестой конструктор задает повторение ( _N ) элементов value _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 на конец параллельного вектора.

указано

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

bool empty() const;

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

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

end

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

iterator end();

const_iterator end() const;

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

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

крышку

Возвращает ссылку или 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);

Параметры

_Delta
Число элементов, добавляемых к объекту.

_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 может хранить объект.

Оператор =

Присваивает 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
Тип распределителя исходного вектора.

_Vector
Исходный объект concurrent_vector.

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

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

operator[]

Предоставляет доступ к элементу по заданному индексу в параллельном векторе. Этот метод является типобезопасным для операций чтения, а также при увеличении вектора, пока вы уверены, что значение _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);

Параметры

_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_type size() const;

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

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

Комментарии

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

позиции

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

void swap(concurrent_vector& _Vector);

Параметры

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

См. также раздел

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