concurrent_vector Class

Třída concurrent_vector je sekvenční třída kontejneru, která umožňuje náhodný přístup k libovolnému prvku. Umožňuje vykonávání operací bezpečně s ohledem na souběžnost při přidávání, přístupu k jednotlivým prvkům, přístupu k iterátoru a procházení iterátorem. V této chvíli souběžnost znamená, že ukazatele nebo iterátory jsou vždy platné. Nejedná se o záruku inicializace prvků ani konkrétního pořadí procházení.

Syntaxe

template<typename T, class _Ax>
class concurrent_vector: protected details::_Allocator_base<T,
    _Ax>,
private details::_Concurrent_vector_base_v4;

Parametry

T
Datový typ prvků, které mají být uloženy ve vektoru.

_Ax
Typ, který představuje uložený objekt alokátoru, zapouzdřující podrobnosti o přidělení a uvolnění paměti pro souběžný vektor. Tento argument je nepovinný a výchozí hodnota je allocator<T>.

Členové

Veřejné typové definice

Název Popis
allocator_type Typ, který představuje třídu alokátoru pro souběžný vektor.
const_iterator Typ, který poskytuje iterátor náhodného přístupu, jenž umožňuje čtení const prvku ve souběžném vektoru.
const_pointer Typ, který poskytuje ukazatel na const prvek souběžného vektoru.
const_reference Typ, který poskytuje odkaz na const prvek uložený v souběžném vektoru pro čtení a provádění operací const.
const_reverse_iterator Typ, který poskytuje iterátor náhodného přístupu, který může číst libovolný const prvek v souběžné vektoru.
difference_type Typ, který poskytuje podepsanou vzdálenost mezi dvěma prvky souběžného vektoru.
iterator Typ, který poskytuje iterátor náhodného přístupu, který může číst libovolný prvek v souběžné vektoru. Úprava prvku pomocí iterátoru není bezpečná z hlediska konkurence.
pointer Typ, který poskytuje ukazatel na prvek souběžného vektoru.
reference Typ, který poskytuje odkaz na prvek uložený ve souběžné vektoru.
reverse_iterator Typ, který poskytuje iterátor náhodného přístupu, který může číst libovolný prvek v obráceném souběžném vektoru. Úprava prvku pomocí iterátoru není bezpečná při souběžném přístupu.
size_type Typ, který spočítá počet prvků v souběžném vektoru.
value_type Typ, který představuje datový typ uložený v souběžné vektoru.

Veřejné konstruktory

Název Popis
concurrent_vector Přetíženo. Vytvoří souběžný vektor.
~concurrent_vector Destruktor Vymaže všechny prvky a zničí tento souběžný vektor.

Veřejné metody

Název Popis
přiřadit Přetíženo. Vymaže prvky souběžného vektoru a přiřadí k němu _N buď kopie _Item, nebo hodnoty určené rozsahem iterátoru [ _Begin, _End). Tato metoda není bezpečná pro souběžnost.
u Přetíženo. Poskytuje přístup k elementu na daném indexu ve současném vektoru. Tato metoda je pro operace čtení bezpečná pro souběžnost a také při růstu vektoru, pokud jste zajistili, že hodnota _Index je menší než velikost souběžného vektoru.
zpět Přetíženo. Vrací referenci nebo const referenci na poslední prvek paralelního vektoru. Pokud je souběžný vektor prázdný, návratová hodnota není definována. Tato metoda je bezpečná při souběžném zpracování.
začít Přetíženo. Vrátí iterátor typu iterator nebo const_iterator na začátek souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
kapacita Vrátí maximální velikost, na kterou může souběžný vektor růst, aniž by bylo nutné přidělit více paměti. Tato metoda je bezpečná při souběžném zpracování.
cbegin Vrátí iterátor typu const_iterator na začátek souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
cend Vrátí iterátor typu const_iterator na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
jasný Vymaže všechny prvky v souběžných vektorech. Tato metoda není bezpečná pro souběžnost.
crbegin Vrátí iterátor typu const_reverse_iterator na začátek souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
crend Vrátí iterátor typu const_reverse_iterator na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
prázdný Testuje, zda souběžný vektor je prázdný v době, kdy je volána tato metoda. Tato metoda je bezpečná při souběžném zpracování.
konec Přetíženo. Vrátí iterátor typu iterator nebo const_iterator na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
přední Přetíženo. Vrátí referenci nebo const referenci na první položku souběžného vektoru. Pokud je souběžný vektor prázdný, návratová hodnota není definována. Tato metoda je bezpečná při souběžném zpracování.
get_allocator Vrátí kopii alokátoru použitého k vytvoření souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
grow_by Přetíženo. Tento souběžný vektor se rozrůstá podle _Delta prvků. Tato metoda je bezpečná při souběžném zpracování.
narůst_na_alespoň Tento souběžný vektor se zvětší, dokud nebude mít alespoň _N prvky. Tato metoda je bezpečná při souběžném zpracování.
max_size Vrátí maximální počet prvků, které může souběžný vektor obsahovat. Tato metoda je bezpečná při souběžném zpracování.
push_back Přetíženo. Připojí danou položku na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
rbegin Přetíženo. Vrátí iterátor typu reverse_iterator nebo const_reverse_iterator na začátek souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
trhat Přetíženo. Vrátí iterátor typu reverse_iterator nebo const_reverse_iterator na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.
rezerva Přidělí dostatek místa pro zvětšení souběžného vektoru na velikost _N , aniž by bylo nutné později přidělit více paměti. Tato metoda není bezpečná pro souběžnost.
změnit velikost Přetíženo. Změní velikost souběžného vektoru na požadovanou velikost, podle potřeby odstraní nebo přidá prvky. Tato metoda není bezpečná pro souběžnost.
shrink_to_fit Zkomprimuje interní reprezentaci souběžného vektoru, aby se snížila fragmentace a optimalizovalo využití paměti. Tato metoda není bezpečná pro souběžnost.
velikost Vrátí počet prvků v souběžné vektoru. Tato metoda je bezpečná při souběžném zpracování.
vyměnit Prohodí obsah dvou souběžných vektorů. Tato metoda není bezpečná pro souběžnost.

Veřejné operátory

Název Popis
operator[] Přetíženo. Poskytuje přístup k elementu na daném indexu ve současném vektoru. Tato metoda je bezpečná pro operace čtení a také při růstu vektoru, pokud jste zajistili, že hodnota _Index je menší než velikost souběžného vektoru.
operator= Přetíženo. Přiřadí obsah jiného concurrent_vector objektu k tomuto objektu. Tato metoda není bezpečná pro souběžnost.

Poznámky

Podrobné informace o concurrent_vector třídě naleznete v tématu Paralelní kontejnery a objekty.

Hierarchie dědičnosti

_Concurrent_vector_base_v4

_Allocator_base

concurrent_vector

Požadavky

Hlavička: concurrent_vector.h

Obor názvů: souběžnost

přiřadit

Vymaže prvky souběžného vektoru a přiřadí k němu _N buď kopie _Item, nebo hodnoty určené rozsahem iterátoru [ _Begin, _End). Tato metoda není bezpečná pro souběžnost.

void assign(
    size_type _N,
    const_reference _Item);

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

Parametry

_InputIterator
Typ zadaného iterátoru.

_N
Počet položek, které se mají zkopírovat do souběžného vektoru.

_Položka
Odkaz na hodnotu použitou k vyplnění souběžného vektoru.

_Začít
Iterátor na první prvek zdrojového rozsahu.

_Konec
Iterátor na jeden za posledním prvkem zdrojového rozsahu.

Poznámky

assign není souběžnost bezpečná. Při volání této metody je nutné zajistit, aby žádné další vlákna vyvolávala metody souběžného vektoru.

v

Poskytuje přístup k elementu na daném indexu ve současném vektoru. Tato metoda je pro operace čtení bezpečná pro souběžnost a také při růstu vektoru, pokud jste zajistili, že hodnota _Index je menší než velikost souběžného vektoru.

reference at(size_type _Index);

const_reference at(size_type _Index) const;

Parametry

_Index
Index prvku, který má být načten.

Návratová hodnota

Odkaz na položku v daném indexu.

Poznámky

Verze funkce at, která vrací ne-const odkaz, nelze použít k souběžnému zápisu do elementu z různých vláken. K synchronizaci souběžných operací čtení a zápisu do stejného datového prvku by se měl použít jiný synchronizační objekt.

Metoda vyvolá out_of_range , pokud _Index je větší nebo rovna velikosti souběžného vektoru, a range_error pokud je index pro poškozenou část vektoru. Podrobnosti o tom, jak se vektor může rozdělit, najdete v tématu Paralelní kontejnery a objekty.

Zpět

Vrací referenci nebo const referenci na poslední prvek paralelního vektoru. Pokud je souběžný vektor prázdný, návratová hodnota není definována. Tato metoda je bezpečná při souběžném zpracování.

reference back();

const_reference back() const;

Návratová hodnota

Odkaz nebo const odkaz na poslední prvek souběžného vektoru.

začít

Vrátí iterátor typu iterator nebo const_iterator na začátek souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

iterator begin();

const_iterator begin() const;

Návratová hodnota

Iterátor typu iterator nebo const_iterator na začátek souběžného vektoru.

kapacita

Vrátí maximální velikost, na kterou může souběžný vektor růst, aniž by bylo nutné přidělit více paměti. Tato metoda je bezpečná při souběžném zpracování.

size_type capacity() const;

Návratová hodnota

Maximální velikost, na kterou může souběžný vektor růst, aniž by bylo nutné přidělit více paměti.

Poznámky

Na rozdíl od standardní knihovny vectorconcurrent_vector jazyka C++ objekt nepřesune existující prvky, pokud přidělí více paměti.

cbegin

Vrátí iterátor typu const_iterator na začátek souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

const_iterator cbegin() const;

Návratová hodnota

Iterátor typu const_iterator na začátek souběžného vektoru.

cend

Vrátí iterátor typu const_iterator na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

const_iterator cend() const;

Návratová hodnota

Iterátor typu const_iterator na konec souběžného vektoru.

odznačit

Vymaže všechny prvky v souběžných vektorech. Tato metoda není bezpečná pro souběžnost.

void clear();

Poznámky

clear není souběžnost bezpečná. Při volání této metody je nutné zajistit, aby žádné další vlákna vyvolávala metody souběžného vektoru. clear neuvolňuje vnitřní pole. Chcete-li uvolnit vnitřní pole, zavolejte funkci shrink_to_fit za clear.

concurrent_vector

Vytvoří souběžný vektor.

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

Parametry

M
Typ alokátoru zdrojového vektoru.

_InputIterator
Typ vstupního iterátoru.

_Hliník
Třída alokátoru, která se má použít s tímto objektem.

_Vektor
Zdrojový concurrent_vector objekt ke zkopírování nebo přesunutí prvků.

_N
Počáteční kapacita objektu concurrent_vector .

_Položka
Hodnota prvků v vytvořeném objektu.

_Začít
Pozice prvního prvku v rozsahu prvků, které se mají zkopírovat.

_Konec
Pozice prvního prvku nad rozsah prvků, které se mají zkopírovat.

Poznámky

Všechny konstruktory ukládají objekt _Al alokátoru a inicializují vektor.

První konstruktor určuje prázdný počáteční vektor a explicitně určuje typ alokátoru. k použití

Druhý a třetí konstruktory určují kopii souběžného vektoru _Vector.

Čtvrtý konstruktor určuje přesunutí souběžného vektoru _Vector.

Pátý konstruktor určuje opakování zadaného čísla (_N) prvků výchozí hodnoty třídy T.

Šestý konstruktor určuje opakování (_N) prvků hodnoty _Item.

Poslední konstruktor určuje hodnoty zadané rozsahem iterátoru [ _Begin, _End).

~concurrent_vector

Vymaže všechny prvky a zničí tento souběžný vektor.

~concurrent_vector();

crbegin

Vrátí iterátor typu const_reverse_iterator na začátek souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

const_reverse_iterator crbegin() const;

Návratová hodnota

Iterátor typu const_reverse_iterator na začátek souběžného vektoru.

crend

Vrátí iterátor typu const_reverse_iterator na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

const_reverse_iterator crend() const;

Návratová hodnota

Iterátor typu const_reverse_iterator na konec souběžného vektoru.

prázdný

Testuje, zda souběžný vektor je prázdný v době, kdy je volána tato metoda. Tato metoda je bezpečná při souběžném zpracování.

bool empty() const;

Návratová hodnota

true pokud byl vektor prázdný v okamžiku, kdy byla funkce volána, false jinak.

konec

Vrátí iterátor typu iterator nebo const_iterator na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

iterator end();

const_iterator end() const;

Návratová hodnota

Iterátor typu iterator nebo const_iterator na konec souběžného vektoru.

přední část

Vrátí referenci nebo const referenci na první položku souběžného vektoru. Pokud je souběžný vektor prázdný, návratová hodnota není definována. Tato metoda je bezpečná při souběžném zpracování.

reference front();

const_reference front() const;

Návratová hodnota

Odkaz nebo const odkaz na první prvek souběžného vektoru.

get_allocator

Vrátí kopii alokátoru použitého k vytvoření souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

allocator_type get_allocator() const;

Návratová hodnota

Kopie alokátoru použitého k vytvoření objektu concurrent_vector .

grow_by

Tento souběžný vektor se rozrůstá podle _Delta prvků. Tato metoda je bezpečná při souběžném zpracování.

iterator grow_by(
    size_type _Delta);

iterator grow_by(
    size_type _Delta,
    const_reference _Item);

Parametry

_Delta
Počet prvků, které se mají připojit k objektu.

_Položka
Hodnota pro inicializaci nových prvků.

Návratová hodnota

Iterátor pro první připojenou položku.

Poznámky

Pokud _Item není zadáno, jsou nové prvky vytvořené jako výchozí.

růst_alespoň_na

Tento souběžný vektor se zvětší, dokud nebude mít alespoň _N prvky. Tato metoda je bezpečná při souběžném zpracování.

iterator grow_to_at_least(size_type _N);

Parametry

_N
Nová minimální velikost objektu concurrent_vector .

Návratová hodnota

Iterátor, který odkazuje na začátek připojené sekvence nebo na prvek v indexu _N , pokud nebyly připojeny žádné prvky.

maximální_velikost

Vrátí maximální počet prvků, které může souběžný vektor obsahovat. Tato metoda je bezpečná při souběžném zpracování.

size_type max_size() const;

Návratová hodnota

Maximální počet prvků, které concurrent_vector objekt může obsahovat.

operator=

Přiřadí obsah jiného concurrent_vector objektu k tomuto objektu. Tato metoda není bezpečná pro souběžnost.

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

Parametry

M
Typ alokátoru zdrojového vektoru.

_Vektor
Zdrojový concurrent_vector objekt.

Návratová hodnota

Odkaz na tento concurrent_vector objekt.

operator[]

Poskytuje přístup k elementu na daném indexu ve současném vektoru. Tato metoda je bezpečná pro operace čtení a také při růstu vektoru, pokud jste zajistili, že hodnota _Index je menší než velikost souběžného vektoru.

reference operator[](size_type _index);

const_reference operator[](size_type _index) const;

Parametry

_Index
Index prvku, který má být načten.

Návratová hodnota

Odkaz na položku v daném indexu.

Poznámky

Verze operator [], která vrací ne-const odkaz, nelze použít k tomu, aby se souběžně zapisovalo do prvku z různých vláken. K synchronizaci souběžných operací čtení a zápisu do stejného datového prvku by se měl použít jiný synchronizační objekt.

Neprovádí se žádná kontrola hranic, aby se zajistilo, že _Index je platný index do souběžného vektoru.

push_back

Připojí danou položku na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

iterator push_back(const_reference _Item);

iterator push_back(T&& _Item);

Parametry

_Položka
Hodnota, která se má připojit.

Návratová hodnota

Iterátor k nově přidané položce.

rbegin

Vrátí iterátor typu reverse_iterator nebo const_reverse_iterator na začátek souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

reverse_iterator rbegin();

const_reverse_iterator rbegin() const;

Návratová hodnota

Iterátor typu reverse_iterator nebo const_reverse_iterator na začátek souběžného vektoru.

trhat

Vrátí iterátor typu reverse_iterator nebo const_reverse_iterator na konec souběžného vektoru. Tato metoda je bezpečná při souběžném zpracování.

reverse_iterator rend();

const_reverse_iterator rend() const;

Návratová hodnota

Iterátor typu reverse_iterator nebo const_reverse_iterator na konec souběžného vektoru.

rezerva

Přidělí dostatek místa pro zvětšení souběžného vektoru na velikost _N , aniž by bylo nutné později přidělit více paměti. Tato metoda není bezpečná pro souběžnost.

void reserve(size_type _N);

Parametry

_N
Počet prvků, pro které je potřeba rezervovat místo.

Poznámky

reserve není souběžnost bezpečná. Při volání této metody je nutné zajistit, aby žádné další vlákna vyvolávala metody souběžného vektoru. Kapacita souběžného vektoru poté, co metoda vrátí, může být větší než požadovaná rezervovaná kapacita.

změnit velikost

Změní velikost souběžného vektoru na požadovanou velikost, podle potřeby odstraní nebo přidá prvky. Tato metoda není bezpečná pro souběžnost.

void resize(
    size_type _N);

void resize(
    size_type _N,
    const T& val);

Parametry

_N
Nová velikost concurrent_vector.

Val
Hodnota nových prvků přidaných do vektoru, pokud je nová velikost větší než původní velikost. Pokud je hodnota vynechána, nové objekty jsou přiřazeny výchozí hodnotu pro jejich typ.

Poznámky

Pokud je velikost kontejneru menší než požadovaná velikost, přidají se do vektoru prvky, dokud nedosáhne požadované velikosti. Pokud je velikost kontejneru větší než požadovaná velikost, odstraní se prvky nejblíže ke konci kontejneru, dokud kontejner nedosáhne velikosti _N. Pokud je současná velikost kontejneru stejná jako požadovaná velikost, není provedena žádná akce.

resize není bezpečné pro souběžné použití. Při volání této metody je nutné zajistit, aby žádné další vlákna vyvolávala metody souběžného vektoru.

zmenšit_na_fit

Zkomprimuje interní reprezentaci souběžného vektoru, aby se snížila fragmentace a optimalizovalo využití paměti. Tato metoda není bezpečná pro souběžnost.

void shrink_to_fit();

Poznámky

Tato metoda interně nově přidělí paměť, přesune prvky a zneplatní všechny iterátory. shrink_to_fit není souběžnost bezpečná. Při volání této funkce je nutné zajistit, aby žádné další vlákna vyvolávaly metody souběžného vektoru.

velikost

Vrátí počet prvků v souběžné vektoru. Tato metoda je bezpečná při souběžném zpracování.

size_type size() const;

Návratová hodnota

Počet prvků v tomto concurrent_vector objektu.

Poznámky

Je zaručeno, že vrácená velikost zahrnuje všechny prvky připojené voláním funkce push_back, nebo rozšiřovací operace, které byly dokončeny před vyvoláním této metody. Může však také zahrnovat prvky, které jsou přiděleny, ale stále ve fázi konstrukce souběžnými voláními jakékoli z metod růstu.

zaměnit

Prohodí obsah dvou souběžných vektorů. Tato metoda není bezpečná pro souběžnost.

void swap(concurrent_vector& _Vector);

Parametry

_Vektor
Objekt concurrent_vector, se kterým se vymění obsah.

Viz také

concurrency – obor názvů
Paralelní kontejnery a objekty