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