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> です。

メンバー

パブリック typedef

名前 説明
allocator_type 同時実行ベクターのアロケーター クラスを表す型。
const_iterator 同時実行ベクター内の const 要素を読み取ることができるランダム アクセス反復子を提供する型。
const_pointer 同時実行ベクター内の const 要素へのポインターを提供する型。
const_reference 読み取りと const 操作を実行するために、同時実行ベクターに格納された const 要素への参照を提供する型。
const_reverse_iterator 同時実行ベクター内の任意の const 要素を読み取ることができるランダム アクセス反復子を提供する型。
difference_type 同時実行ベクター内の 2 つの要素間の符号付き距離を提供する型。
iterator 同時実行ベクター内の任意の要素を読み取ることができるランダム アクセス反復子を提供する型。 反復子を使用した要素の変更は、コンカレンシー セーフではありません。
pointer 同時実行ベクター内の要素へのポインターを提供する型。
reference 同時実行ベクターに格納されている要素への参照を提供する型。
reverse_iterator 反転同時実行ベクター内の任意の要素を読み取ることができるランダム アクセス反復子を提供する型。 反復子を使用した要素の変更は、コンカレンシー セーフではありません。
size_type 同時実行ベクター内の要素の数をカウントする型。
value_type 同時実行ベクター内に格納されているデータ型を表す型。

パブリック コンストラクター

名前 説明
concurrent_vector 過負荷です。 同時実行ベクターを構築します。
~concurrent_vector デストラクター すべての要素を消去し、この同時実行ベクターを破棄します。

パブリック メソッド

名前 説明
assign 過負荷です。 同時実行ベクターの要素を消去し、それに _Item_N コピー、または反復子の範囲 [_Begin, _End] によって指定された値を割り当てます。 このメソッドはコンカレンシー セーフではありません。
at 過負荷です。 同時実行ベクター内の指定されたインデックス位置にある要素へのアクセスを提供します。 値 _Index が同時実行ベクターのサイズより小さいことを保証している限り、このメソッドは、読み取り操作に対して、また、ベクターを拡大している間はコンカレンシー セーフです。
back 過負荷です。 同時実行ベクター内の最後の要素への参照または const 参照を返します。 同時実行ベクターが空の場合、戻り値は未定義になります。 このメソッドはコンカレンシー セーフです。
begin 過負荷です。 同時実行ベクターの先頭への iterator 型または const_iterator 型の反復子を返します。 このメソッドはコンカレンシー セーフです。
容量 より多くのメモリを割り当てることなく、同時実行ベクターを拡張できる最大サイズを返します。 このメソッドはコンカレンシー セーフです。
cbegin 同時実行ベクターの先頭への const_iterator 型の反復子を返します。 このメソッドはコンカレンシー セーフです。
cend 同時実行ベクターの末尾への const_iterator 型の反復子を返します。 このメソッドはコンカレンシー セーフです。
clear 同時実行ベクターのすべての要素を消去します。 このメソッドはコンカレンシー セーフではありません。
crbegin 同時実行ベクターの先頭への const_reverse_iterator 型の反復子を返します。 このメソッドはコンカレンシー セーフです。
crend 同時実行ベクターの末尾への const_reverse_iterator 型の反復子を返します。 このメソッドはコンカレンシー セーフです。
このメソッドが呼び出された時点で同時実行ベクターが空かどうかをテストします。 このメソッドはコンカレンシー セーフです。
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 同時実行ベクター内の要素の数を返します。 このメソッドはコンカレンシー セーフです。
スワップ 2 つの同時実行ベクターのコンテンツをスワップします。 このメソッドはコンカレンシー セーフではありません。

パブリック演算子

名前 説明
operator[] 過負荷です。 同時実行ベクター内の指定されたインデックス位置にある要素へのアクセスを提供します。 値 _Index が同時実行ベクターのサイズより小さいことを保証している限り、このメソッドは、読み取り操作に対して、また、ベクターを拡大している間はコンカレンシー セーフです。
operator= 過負荷です。 別の concurrent_vector オブジェクトの内容をこのオブジェクトに割り当てます。 このメソッドはコンカレンシー セーフではありません。

解説

concurrent_vector クラスの詳細については、「並列コンテナーと並列オブジェクト」を参照してください。

継承階層

_Concurrent_vector_base_v4

_Allocator_base

concurrent_vector

必要条件

ヘッダー: concurrent_vector.h

名前空間: concurrency

割り当て

同時実行ベクターの要素を消去し、それに _Item_N コピー、または反復子の範囲 [_Begin, _End] によって指定された値を割り当てます。 このメソッドはコンカレンシー セーフではありません。

void assign(
    size_type _N,
    const_reference _Item);

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

パラメーター

_InputIterator
指定した反復子の型。

_N
同時実行ベクターにコピーする項目の数。

_Item
同時実行ベクターを埋めるために使用される値への参照。

_Begin
ソース範囲の最初の要素を指す反復子。

_End
ソース範囲の最後の要素の 1 つ後ろを指す反復子。

解説

assign はコンカレンシー セーフではありません。 このメソッドを呼び出すときは、他のスレッドが同時実行ベクターに対してメソッドを呼び出していないことを確認する必要があります。

at

同時実行ベクター内の指定されたインデックス位置にある要素へのアクセスを提供します。 値 _Index が同時実行ベクターのサイズより小さいことを保証している限り、このメソッドは、読み取り操作に対して、また、ベクターを拡大している間はコンカレンシー セーフです。

reference at(size_type _Index);

const_reference at(size_type _Index) const;

パラメーター

_Index
取得する要素のインデックス。

戻り値

指定されたインデックス位置にある項目への参照。

解説

const 以外の参照を返す関数 at のバージョンは、異なるスレッドから要素への同時書き込みに使用できません。 同じデータ要素に対する同時読み取りおよび書き込み操作を同期させるには、別の同期オブジェクトを使用する必要があります。

このメソッドは、_Index が同時実行ベクターのサイズ以上の場合は out_of_range をスローし、インデックスがベクターの破損した部分を対象としている場合は 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;

戻り値

より多くのメモリを割り当てることなく、同時実行ベクターを拡張できる最大サイズ。

解説

C++ 標準ライブラリ vector とは異なり、concurrent_vector オブジェクトは、より多くのメモリを確保しても、既存の要素を移動しません。

cbegin

同時実行ベクターの先頭への const_iterator 型の反復子を返します。 このメソッドはコンカレンシー セーフです。

const_iterator cbegin() const;

戻り値

同時実行ベクターの先頭への const_iterator 型の反復子。

cend

同時実行ベクターの末尾への const_iterator 型の反復子を返します。 このメソッドはコンカレンシー セーフです。

const_iterator cend() const;

戻り値

同時実行ベクターの末尾への const_iterator 型の反復子。

clear

同時実行ベクターのすべての要素を消去します。 このメソッドはコンカレンシー セーフではありません。

void clear();

解説

clear はコンカレンシー セーフではありません。 このメソッドを呼び出すときは、他のスレッドが同時実行ベクターに対してメソッドを呼び出していないことを確認する必要があります。 clear では内部配列は解放されません。 内部配列を解放するには、clear の後に shrink_to_fit 関数を呼び出します。

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 を格納し、ベクターを初期化します。

1 つ目のコンストラクターは、空の初期ベクターを指定し、使用するアロケーターの型を明示的に 指定します。

2 つ目および 3 つ目のコンストラクターは、同時実行ベクター _Vector のコピーを指定します。

4 番目のコンストラクターは、同時実行ベクター _Vector の移動を指定します。

5 つ目のコンストラクターは、T クラスの、指定された数 (_N) の既定値の要素を繰り返すことを指定します。

6 つ目のコンストラクターは、値 _Item の (_N) 要素の繰り返しを指定します。

最後のコンストラクターは、反復子の範囲 [_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 型の反復子。

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

パラメーター

_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 オブジェクトが保持できる要素の最大数。

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
ソース ベクターのアロケーターの型。

_Vector
ソース concurrent_vector オブジェクト。

戻り値

この concurrent_vector オブジェクトへの参照。

operator[]

同時実行ベクター内の指定されたインデックス位置にある要素へのアクセスを提供します。 値 _Index が同時実行ベクターのサイズより小さいことを保証している限り、このメソッドは、読み取り操作に対して、また、ベクターを拡大している間はコンカレンシー セーフです。

reference operator[](size_type _index);

const_reference operator[](size_type _index) const;

パラメーター

_Index
取得する要素のインデックス。

戻り値

指定されたインデックス位置にある項目への参照。

解説

const 以外の参照を返す operator [] のバージョンは、異なるスレッドから要素への同時書き込みに使用できません。 同じデータ要素に対する同時読み取りおよび書き込み操作を同期させるには、別の同期オブジェクトを使用する必要があります。

_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 はコンカレンシー セーフではありません。 このメソッドを呼び出すときは、他のスレッドが同時実行ベクターに対してメソッドを呼び出していないことを確認する必要があります。 メソッドが戻った後の同時実行ベクターの容量は、要求された予約よりも大きくなる可能性があります。

resize

同時実行ベクターのサイズを、要求されたサイズに変更し、必要に応じて要素を削除または追加します。 このメソッドはコンカレンシー セーフではありません。

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 の呼び出しによって追加されたすべての要素、またはこのメソッドを呼び出す前に完了した拡張操作が含まれることが保証されます。 ただし、任意の拡張メソッドの同時呼び出しによって割り当てられ、まだ構築中である要素が含まれる場合もあります。

スワップ

2 つの同時実行ベクターのコンテンツをスワップします。 このメソッドはコンカレンシー セーフではありません。

void swap(concurrent_vector& _Vector);

パラメーター

_Vector
concurrent_vector内容を交換するオブジェクト。

関連項目

コンカレンシー名前空間
並列コンテナーと並列オブジェクト