Класс 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;
Возвращаемое значение
Максимальный размер, до которого может расти параллельный вектор без необходимости выделения дополнительной памяти.
Замечания
В отличие от стандартной библиотеки vector
concurrent_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
Параллельные контейнеры и объекты