Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс 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>.
Участники
Общедоступные typedefы
| Имя | Описание |
|---|---|
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 | Удаляет все элементы и уничтожает этот параллельный вектор. |
Открытые методы
| Имя | Описание |
|---|---|
| назначить | Перегружен. Удаляет элементы в параллельном векторе и присваивает ему либо _N копий _Item, либо значения, указанные диапазоном итератора [ _Begin, _End). Этот метод не является безопасным для параллелизма. |
| у | Перегружен. Предоставляет доступ к элементу по заданному индексу в параллельном векторе. Этот метод безопасен для операций чтения и при увеличении размера вектора, если вы убедились, что значение _Index меньше размера параллельного вектора. |
| Назад | Перегружен. Возвращает ссылку или const ссылку на последний элемент в параллельном векторе. Если одновременный вектор пуст, возвращаемое значение не определено. Этот метод является безопасным для параллелизма. |
| начать | Перегружен. Возвращает итератор типа iterator или const_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма. |
| емкость | Возвращает максимальный размер, до которого может увеличиваться одновременный вектор без необходимости выделения дополнительной памяти. Этот метод является безопасным для параллелизма. |
| cbegin | Возвращает итератор типа const_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма. |
| cend | Возвращает итератор типа const_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма. |
| очистить | Удаляет все элементы в параллельном векторе. Этот метод не является безопасным для параллелизма. |
| crbegin | Возвращает итератор типа const_reverse_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма. |
| crend | Возвращает итератор типа const_reverse_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма. |
| пустой | Проверяет, является ли одновременный вектор пустым во время вызова этого метода. Этот метод является безопасным для параллелизма. |
| конец | Перегружен. Возвращает итератор типа iterator или const_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма. |
| фронт | Перегружен. Возвращает ссылку или const ссылку на первый элемент в параллельном векторе. Если одновременный вектор пуст, возвращаемое значение не определено. Этот метод является безопасным для параллелизма. |
| get_allocator | Возвращает копию распределителя, используемую для создания параллельного вектора. Этот метод является безопасным для параллелизма. |
| grow_by | Перегружен. Увеличивает этот конкурентный вектор на _Delta элементов. Этот метод является безопасным для параллелизма. |
| увеличить_по_крайней_мере | Увеличивает этот параллельный вектор до тех пор, пока он не содержит по крайней мере _N элементы. Этот метод является безопасным для параллелизма. |
| max_size | Возвращает максимальное количество элементов, которые может содержать одновременный вектор. Этот метод является безопасным для параллелизма. |
| push_back | Перегружен. Добавляет заданный элемент в конец параллельного вектора. Этот метод является безопасным для параллелизма. |
| rbegin | Перегружен. Возвращает итератор типа reverse_iterator или const_reverse_iterator в начало параллельного вектора. Этот метод является безопасным для параллелизма. |
| раздирать | Перегружен. Возвращает итератор типа reverse_iterator или const_reverse_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма. |
| резерв | Выделяет достаточно места для увеличения размера параллельного вектора _N без необходимости выделять больше памяти позже. Этот метод не является безопасным для параллелизма. |
| масштабировать | Перегружен. Изменяет размер параллельного вектора на запрошенный размер, удаление или добавление элементов по мере необходимости. Этот метод не является безопасным для параллелизма. |
| уменьшить_до_соответствующего_размера | Сжимает внутреннее представление параллельного вектора для уменьшения фрагментации и оптимизации использования памяти. Этот метод не является безопасным для параллелизма. |
| размер | Возвращает количество элементов в параллельном векторе. Этот метод является безопасным для параллелизма. |
| обменивать | Переключает содержимое двух параллельных векторов. Этот метод не является безопасным для параллелизма. |
Открытые операторы
| Имя | Описание |
|---|---|
| оператор[] | Перегружен. Предоставляет доступ к элементу по заданному индексу в параллельном векторе. Этот метод безопасен для параллельного выполнения операций чтения, а также при увеличении размера вектора, при условии, что вы удостоверились, что значение _Index меньше размера параллельного вектора. |
| оператор = | Перегружен. Назначает содержимое другого concurrent_vector объекта этому объекту. Этот метод не является безопасным для параллелизма. |
Замечания
Подробные сведения о классе см. в разделе "Параллельные concurrent_vector контейнеры и объекты".
Иерархия наследования
_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
Количество элементов для копирования в параллельный вектор.
_Пункт
Ссылка на значение, используемое для заполнения параллельного вектора.
_Начинать
Итератор к первому элементу исходного диапазона.
_Конец
Итератор к одному последнему элементу исходного диапазона.
Замечания
assign не является безопасным для параллелизма. Вы должны убедиться, что другие потоки не вызывают методы в параллельном векторе при вызове этого метода.
в
Предоставляет доступ к элементу по заданному индексу в параллельном векторе. Этот метод безопасен для операций чтения и при увеличении размера вектора, если вы убедились, что значение _Index меньше размера параллельного вектора.
reference at(size_type _Index);
const_reference at(size_type _Index) const;
Параметры
_Индекс
Индекс извлекаемого элемента.
Возвращаемое значение
Ссылка на элемент по указанному индексу.
Замечания
Версия функции at, которая возвращает не const ссылку, не может использоваться для одновременной записи в элемент из разных потоков. Другой объект синхронизации должен использоваться для синхронизации параллельных операций чтения и записи с тем же элементом данных.
Метод вызывает out_of_range исключение, если _Index больше или равно размеру параллельного вектора, и range_error если индекс предназначен для разбитой части вектора. Дополнительные сведения о том, как вектор может стать неисправным, см. в разделе "Параллельные контейнеры и объекты".
назад
Возвращает ссылку или const ссылку на последний элемент в параллельном векторе. Если одновременный вектор пуст, возвращаемое значение не определено. Этот метод является безопасным для параллелизма.
reference back();
const_reference back() const;
Возвращаемое значение
Ссылка или const ссылка на последний элемент в параллельном векторе.
начинать
Возвращает итератор типа 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 до конца параллельного вектора.
очистить
Удаляет все элементы в параллельном векторе. Этот метод не является безопасным для параллелизма.
void clear();
Замечания
clear не является безопасным для параллелизма. Вы должны убедиться, что другие потоки не вызывают методы в параллельном векторе при вызове этого метода.
clear не освобождает внутренние массивы. Чтобы освободить внутренние массивы, вызовите функцию shrink_to_fit после clear.
конкурентный вектор
Создает параллельный вектор.
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, указывающий на начало параллельного вектора.
кренд
Возвращает итератор типа const_reverse_iterator в конец параллельного вектора. Этот метод является безопасным для параллелизма.
const_reverse_iterator crend() const;
Возвращаемое значение
Итератор типа const_reverse_iterator до конца параллельного вектора.
пусто
Проверяет, является ли одновременный вектор пустым во время вызова этого метода. Этот метод является безопасным для параллелизма.
bool empty() const;
Возвращаемое значение
true Значение по умолчанию, если вектор пуст при вызове функции, false в противном случае.
конец
Возвращает итератор типа 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);
Параметры
_Дельта
Количество элементов, добавляемых к объекту.
_Пункт
Значение, с которым будут инициализироваться новые элементы.
Возвращаемое значение
Итератор для первого добавленного элемента.
Замечания
Если _Item не указан, новые элементы создаются по умолчанию.
grow_to_at_least
Увеличивает этот параллельный вектор до тех пор, пока он не содержит по крайней мере _N элементы. Этот метод является безопасным для параллелизма.
iterator grow_to_at_least(size_type _N);
Параметры
_N
Новый минимальный размер объекта concurrent_vector .
Возвращаемое значение
Итератор, указывающий на начало добавленной последовательности или элемент в индексе _N , если элементы не были добавлены.
максимальный_размер
Возвращает максимальное количество элементов, которые может содержать одновременный вектор. Этот метод является безопасным для параллелизма.
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;
Параметры
_Индекс
Индекс извлекаемого элемента.
Возвращаемое значение
Ссылка на элемент по указанному индексу.
Замечания
Версию 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, указывающий на начало конкурентного вектора.
раздирать
Возвращает итератор типа 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 не является безопасным для параллелизма. Вы должны убедиться, что другие потоки не вызывают методы в параллельном векторе при вызове этого метода.
уменьшить_до_размера
Сжимает внутреннее представление параллельного вектора для уменьшения фрагментации и оптимизации использования памяти. Этот метод не является безопасным для параллелизма.
void shrink_to_fit();
Замечания
Этот метод будет внутренне повторно выделять элементы перемещения памяти, недействив все итераторы.
shrink_to_fit не является безопасным для параллелизма. При вызове этой функции другие потоки не вызывают методы в параллельном векторе.
размер
Возвращает количество элементов в параллельном векторе. Этот метод является безопасным для параллелизма.
size_type size() const;
Возвращаемое значение
Количество элементов в этом concurrent_vector объекте.
Замечания
Возвращаемый размер гарантированно включает все элементы, добавленные вызовами функции push_back, или операции роста, выполненные до вызова этого метода. Однако он также может включать элементы, которые выделяются, но все еще находятся в процессе создания одновременными вызовами любого из методов расширения.
замена
Переключает содержимое двух параллельных векторов. Этот метод не является безопасным для параллелизма.
void swap(concurrent_vector& _Vector);
Параметры
_Вектор
Объект concurrent_vector для замены содержимого.
См. также
Пространство имен параллелизм
Параллельные контейнеры и объекты