Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Klassen vector<bool> är en partiell specialisering av vector för element av typen bool. Den har en allokering för den underliggande typen som används av specialiseringen, vilket ger utrymmesoptimering genom att lagra ett bool värde per bit.
Syntax
template <class Allocator = allocator<bool>>
class vector<bool, Allocator>
Anmärkningar
Specialiseringen för den här klassmallen fungerar som , förutom de skillnader som vectorbeskrivs i den här artikeln.
Åtgärder som hanterar bool typen motsvarar värden i containerlagringen.
allocator_traits::construct används inte för att konstruera dessa värden.
Typedefs
| Typnamn | Beskrivning |
|---|---|
const_pointer |
En typedef till en const_iterator som kan fungera som en konstant pekare till ett booleskt element i vector<bool>. |
const_reference |
En typedef för bool. Efter initieringen observeras inte uppdateringar av det ursprungliga värdet. |
pointer |
En typedef till en iterator som kan fungera som en pekare till ett booleskt element i vector<bool>. |
Medlemsfunktioner
| Medlemsfunktion | Beskrivning |
|---|---|
flip |
Omvänt alla bitar i vector<bool>. |
swap |
Utbyter elementen i två vector<bool>s. |
operator[] |
Returnerar en simulerad referens till elementet vector<bool> vid en angiven position. |
at |
Fungerar på samma sätt som den ospecialiserade vectorfunktionen ::at, förutom att den använder proxyklassen vector<bool>::reference. Se även operator[]. |
front |
Fungerar på samma sätt som den ospecialiserade vectorfunktionen ::front, förutom att den använder proxyklassen vector<bool>::reference. Se även operator[]. |
back |
Fungerar på samma sätt som den ospecialiserade vectorfunktionen ::back, förutom att den använder proxyklassen vector<bool>::reference. Se även operator[]. |
Proxyklass
| Namn | Beskrivning |
|---|---|
vector<bool>::reference klass |
En klass som fungerar som en proxy för att simulera bool& beteende och vars objekt kan ge referenser till element (enkla bitar) i ett vector<bool> objekt. |
Kravspecifikation
Rubrik: <vector>
Namespace:std
vector<bool>::const_pointer
En typ som beskriver ett objekt som kan fungera som en konstant pekare till ett booleskt element i sekvensen vector<bool> som objektet innehåller.
typedef const_iterator const_pointer;
vector<bool>::const_reference
En typ som beskriver ett objekt som kan fungera som en konstant referens till ett booleskt element i sekvensen vector<bool> som objektet innehåller.
typedef bool const_reference;
Anmärkningar
Mer information och kodexempel finns i vector<bool>::reference::operator=.
vector<bool>::flip
Omvänt alla bitar i en vector<bool>.
void flip();
Exempel
// 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[]
Returnerar en simulerad referens till elementet vector<bool> vid en angiven position.
vector<bool>::reference operator[](size_type Pos);
vector&<bool&>::const_reference operator[](size_type Pos) const;
Parameterar
Pos
Elementets vector<bool> position.
Returvärde
Ett vector<bool>::reference eller vector<bool>::const_reference -objekt som innehåller värdet för det indexerade elementet.
Om den angivna positionen är större än eller lika med containerns storlek är resultatet odefinierat.
Anmärkningar
Om du kompilerar med _ITERATOR_DEBUG_LEVEL set uppstår ett körningsfel om du försöker komma åt ett element utanför vektorns gränser. Mer information finns i Kontrollerade iteratorer.
Exempel
Det här kodexemplet visar korrekt användning av vector<bool>::operator[] och två vanliga kodfel som kommenteras ut. Dessa misstag orsakar fel eftersom adressen för objektet vector<bool>::reference som vector<bool>::operator[] returnerar inte kan tas.
// 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
En typ som beskriver ett objekt som kan fungera som pekare till ett booleskt element i sekvensen vector<bool> som objektet innehåller.
typedef iterator pointer;
vector<bool>::reference-klass
Klassen vector<bool>::reference är en proxyklass som tillhandahålls av vector<bool> klassen för att simulera bool&.
Anmärkningar
En simulerad referens krävs eftersom C++ inte tillåter direkta referenser till bitar.
vector<bool> använder bara en bit per element, vilket kan refereras med hjälp av den här proxyklassen. Referenssimuleringen är dock inte klar eftersom vissa tilldelningar inte är giltiga. Eftersom det till exempel inte går att ta objektets adress vector<bool>::reference är följande kod som använder vector<bool>::operator[] inte korrekt:
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
Invertera det booleska värdet för ett refererat vector<bool> element.
void flip();
Exempel
// 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
Tillhandahåller en implicit konvertering från vector<bool>::reference till bool.
operator bool() const;
Returvärde
Det booleska värdet för objektets vector<bool> element.
Anmärkningar
Det vector<bool> går inte att ändra objektet av den här operatorn.
vector<bool>::reference::operator=
Tilldelar ett booleskt värde till en bit, eller värdet som innehas av ett refererat element till en bit.
reference& operator=(const reference& Right);
reference& operator=(bool Val);
Parameterar
Right
Elementreferensen vars värde ska tilldelas till biten.
Val
Det booleska värde som ska tilldelas till biten.
Exempel
// 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
Statisk medlemsfunktion som utbyter två element i booleska vektorer (vector<bool>) med hjälp av proxyklassen vector<bool>::reference.
static void swap(
reference Left,
reference Right);
Parameterar
Left
Det element som ska bytas ut med -elementet Right .
Right
Det element som ska bytas ut med -elementet Left .
Anmärkningar
Den här överlagringen stöder de särskilda proxykraven för vector<bool>.
vector::swap har samma funktioner som överlagringen med ett argument för vector<bool>::swap().
Se även
Trådsäkerhet i C++ Standard Library
Standardbiblioteksreferens för C++