vector<bool> Třída

Třída vector<bool> je částečná specializace vector prvků typu bool. Má alokátor základního typu, který se používá podle specializace, což poskytuje optimalizaci prostoru uložením jedné bool hodnoty na bit.

Syntaxe

template <class Allocator = allocator<bool>>
class vector<bool, Allocator>

Poznámky

Tato specializace šablony tříd se chová podobně, vectors výjimkou rozdílů vysvětlených v tomto článku.

Operace, které pracují s typem bool , odpovídají hodnotám v úložišti kontejneru. allocator_traits::construct se nepoužívá k vytvoření těchto hodnot.

Typedefs

Název typu Popis
const_pointer Typedef to a const_iterator that can serve as a constant pointer to a Boolean element of the vector<bool>.
const_reference Definice typu pro bool. Po inicializaci se nezobrazují aktualizace původní hodnoty.
pointer Typedef na iterator , který může sloužit jako ukazatel na boolean elementu vector<bool>.

Členské funkce

Členová funkce Popis
flip Vrátí všechny bity v objektu vector<bool>.
swap Vymění prvky dvou vector<bool>s.
operator[] Vrátí simulovaný odkaz na vector<bool> prvek na zadané pozici.
at Funguje stejně jako nespecializovaná vectorfunkce ::at, s tím rozdílem, že používá třídu vector<bool>::referenceproxy . Viz operator[]také .
front Funguje stejně jako nespecializovaná vectorfunkce ::front, s tím rozdílem, že používá třídu vector<bool>::referenceproxy . Viz operator[]také .
back Funguje stejně jako nespecializovaná vectorfunkce ::back s tím rozdílem, že používá třídu vector<bool>::referenceproxy . Viz operator[]také .

Třída proxy

Jméno popis
vector<bool>::reference Třída Třída, která funguje jako proxy pro simulaci bool& chování a jejíž objekty mohou poskytovat odkazy na prvky (jednotlivé bity) v rámci objektu vector<bool> .

Požadavky

Hlavička: <vector>

Obor názvů:std

vector<bool>::const_pointer

Typ, který popisuje objekt, který může sloužit jako konstantní ukazatel na logický prvek sekvence obsažené objektu vector<bool> .

typedef const_iterator const_pointer;

vector<bool>::const_reference

Typ, který popisuje objekt, který může sloužit jako konstantní odkaz na logický prvek sekvence obsažené objektu vector<bool> .

typedef bool const_reference;

Poznámky

Další informace a příklady kódu najdete v tématu vector<bool>::reference::operator=.

vector<bool>::flip

Vrátí všechny bity v objektu vector<bool>.

void flip();

Příklad

// vector_bool_flip.cpp
// compile with: /EHsc /W4
#include <vector>
#include <iostream>

int main()
{
    using namespace std;
    cout << boolalpha; // format output for subsequent code

    vector<bool> vb = { true, false, false, true, true };
    cout << "The vector is:" << endl << "    ";
    for (const auto& b : vb) {
        cout << b << " ";
    }
    cout << endl;

    vb.flip();

    cout << "The flipped vector is:" << endl << "    ";
    for (const auto& b : vb) {
        cout << b << " ";
    }
    cout << endl;
}

vector<bool>::operator[]

Vrátí simulovaný odkaz na vector<bool> prvek na zadané pozici.

vector<bool>::reference operator[](size_type Pos);

vector&<bool&>::const_reference operator[](size_type Pos) const;

Parametry

Pos
Pozice vector<bool> prvku.

Vrácená hodnota

A vector<bool>::reference nebo vector<bool>::const_reference objekt, který obsahuje hodnotu indexovaného prvku.

Pokud je zadaná pozice větší nebo rovna velikosti kontejneru, výsledek je nedefinován.

Poznámky

Pokud kompilujete pomocí _ITERATOR_DEBUG_LEVEL sady, dojde k chybě za běhu, pokud se pokusíte získat přístup k prvku mimo hranice vektoru. Další informace naleznete v tématu Kontrola iterátorů.

Příklad

Tento příklad kódu ukazuje správné použití vector<bool>::operator[] a dvě běžné chyby kódování, které jsou okomentovány. Tyto chyby způsobují chyby, protože adresu objektu vector<bool>::reference , který vector<bool>::operator[] vrací, nelze vzít.

// cl.exe /EHsc /nologo /W4 /MTd
#include <vector>
#include <iostream>

int main()
{
    using namespace std;
    cout << boolalpha;
    vector<bool> vb;

    vb.push_back(true);
    vb.push_back(false);

    //    bool* pb = &vb[1]; // conversion error - do not use
    //    bool& refb = vb[1];   // conversion error - do not use
    bool hold = vb[1];
    cout << "The second element of vb is " << vb[1] << endl;
    cout << "The held value from the second element of vb is " << hold << endl;

    // Note this doesn't modify hold.
    vb[1] = true;
    cout << "The second element of vb is " << vb[1] << endl;
    cout << "The held value from the second element of vb is " << hold << endl;
}
The second element of vb is false
The held value from the second element of vb is false
The second element of vb is true
The held value from the second element of vb is false

vector<bool>::pointer

Typ, který popisuje objekt, který může sloužit jako ukazatel na logický prvek sekvence obsažené objektem vector<bool> .

typedef iterator pointer;

vector<bool>::reference Třída

Třída vector<bool>::reference je třída proxy, kterou vector<bool> poskytuje třída pro simulaci bool&.

Poznámky

Simulovaný odkaz je povinný, protože jazyk C++ nativně neumožňuje přímé odkazy na bity. vector<bool> používá pouze jeden bit na prvek, na který lze odkazovat pomocí této třídy proxy. Referenční simulace ale není dokončená, protože určitá přiřazení nejsou platná. Například vzhledem k tomu, že adresu objektu vector<bool>::reference nelze vzít, následující kód, který používá vector<bool>::operator[] , není správný:

vector<bool> vb;
//...
bool* pb = &vb[1]; // conversion error - do not use
bool& refb = vb[1];   // conversion error - do not use

vector<bool>::reference::flip

Invertuje logickou hodnotu odkazovaného vector<bool> prvku.

void flip();

Příklad

// vector_bool_ref_flip.cpp
// compile with: /EHsc /W4
#include <vector>
#include <iostream>

int main()
{
    using namespace std;
    cout << boolalpha;

    vector<bool> vb = { true, false, false, true, true };

    cout << "The vector is: " << endl << "    ";
    for (const auto& b : vb) {
        cout << b << " ";
    }
    cout << endl;

    vector<bool>::reference vbref = vb.front();
    vbref.flip();

    cout << "The vector with first element flipped is: " << endl << "    ";
    for (const auto& b : vb) {
        cout << b << " ";
    }
    cout << endl;
}
The vector is:
    true false false true true
The vector with first element flipped is:
    false false false true true

vector<bool>::reference::operator bool

Poskytuje implicitní převod z vector<bool>::reference na bool.

operator bool() const;

Vrácená hodnota

Logická hodnota prvku objektu vector<bool> .

Poznámky

Tento vector<bool> operátor nemůže objekt upravit.

vector<bool>::reference::operator=

Přiřadí k bitu logickou hodnotu nebo hodnotu obsaženou referenčním prvkem.

reference& operator=(const reference& Right);
reference& operator=(bool Val);

Parametry

Right
Odkaz prvku, jehož hodnota má být přiřazena k bitu.

Val
Logická hodnota, která má být přiřazena k bitu.

Příklad

// vector_bool_ref_op_assign.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
#include <string>

using namespace std;

template <typename C> void print(const string& s, const C& c) {
    cout << s;

    for (const auto& e : c) {
        cout << e << " ";
    }

    cout << endl;
}

int main()
{
    cout << boolalpha;

    vector<bool> vb = { true, false, false, true, true };

    print("The vector is: ", vb);

    // Invoke vector<bool>::reference::operator=()
    vector<bool>::reference refelem1 = vb[0];
    vector<bool>::reference refelem2 = vb[1];
    vector<bool>::reference refelem3 = vb[2];

    bool b1 = refelem1;
    bool b2 = refelem2;
    bool b3 = refelem3;
    cout << "The original value of the 1st element stored in a bool: " << b1 << endl;
    cout << "The original value of the 2nd element stored in a bool: " << b2 << endl;
    cout << "The original value of the 3rd element stored in a bool: " << b3 << endl;
    cout << endl;

    refelem2 = refelem1;

    print("The vector after assigning refelem1 to refelem2 is now: ", vb);

    refelem3 = true;

    print("The vector after assigning false to refelem1 is now: ", vb);

    // The initial values are still stored in the bool variables and remained unchanged
    cout << "The original value of the 1st element still stored in a bool: " << b1 << endl;
    cout << "The original value of the 2nd element still stored in a bool: " << b2 << endl;
    cout << "The original value of the 3rd element still stored in a bool: " << b3 << endl;
    cout << endl;
}
The vector is: true false false true true
The original value of the 1st element stored in a bool: true
The original value of the 2nd element stored in a bool: false
The original value of the 3rd element stored in a bool: false

The vector after assigning refelem1 to refelem2 is now: true true false true true
The vector after assigning false to refelem1 is now: true true true true true
The original value of the 1st element still stored in a bool: true
The original value of the 2nd element still stored in a bool: false
The original value of the 3rd element still stored in a bool: false

vector<bool>::swap

Statická členská funkce, která vyměňuje dva prvky logických vektorů ( vector<bool>) pomocí třídy vector<bool>::referenceproxy .

static void swap(
    reference Left,
    reference Right);

Parametry

Left
Prvek, který se má vyměnit s elementem Right .

Right
Prvek, který se má vyměnit s elementem Left .

Poznámky

Toto přetížení podporuje zvláštní požadavky proxy serveru vector<bool>. vector::swap má stejné funkce jako přetížení s jedním argumentem .vector<bool>::swap()

Viz také

Bezpečný přístup z více vláken ve standardní knihovně C++
Standardní knihovna C++ – referenční dokumentace