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ě, vector
s 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á vector funkce ::at, s tím rozdílem, že používá třídu vector<bool>::reference proxy . Viz operator[] také . |
front |
Funguje stejně jako nespecializovaná vector funkce ::front, s tím rozdílem, že používá třídu vector<bool>::reference proxy . Viz operator[] také . |
back |
Funguje stejně jako nespecializovaná vector funkce ::back s tím rozdílem, že používá třídu vector<bool>::reference proxy . Viz operator[] také . |
Třída proxy
Název | 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.
Návratová 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;
Návratová 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>::reference
proxy .
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