Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az vector<bool> osztály a típuselemek vectorrészleges specializációjabool. Rendelkezik egy kiosztóval a specializáció által használt mögöttes típushoz, amely bitenként egy bool érték tárolásával biztosít helyoptimalizálást.
Szemantika
template <class Allocator = allocator<bool>>
class vector<bool, Allocator>
Megjegyzések
Ez az osztálysablon-specializáció úgy viselkedik, mint vectora cikkben ismertetett különbségek kivételével.
A típussal bool foglalkozó műveletek a tárolótároló értékeinek felelnek meg.
allocator_traits::construct ezeket az értékeket nem használja.
Typedefs
| Típus neve | Leírás |
|---|---|
const_pointer |
Olyan típusdef, const_iterator amely állandó mutatóként szolgálhat a vector<bool>logikai elemhez. |
const_reference |
A typedef for bool. Az inicializálás után nem figyeli meg az eredeti érték frissítéseit. |
pointer |
Olyan típusdef iterator , amely a logikai elem vector<bool>mutatójaként szolgálhat. |
Tagfüggvények
| Tagfüggvény | Leírás |
|---|---|
flip |
A .-ban lévő összes bitet megfordítja vector<bool>. |
swap |
Két vector<bool>elemeit cseréli le. |
operator[] |
Szimulált hivatkozást ad vissza egy adott pozícióban lévő vector<bool> elemre. |
at |
A függvények megegyeznek a nem megadott vector::at függvénnyel, azzal a kivételével, hogy a proxyosztályt vector<bool>::referencehasználja. Lásd még operator[]. |
front |
A nem megadott vector::front függvényével megegyező függvények, kivéve, hogy a proxyosztályt vector<bool>::referencehasználja. Lásd még operator[]. |
back |
A függvények megegyeznek a nem megadott vector::back függvényével, kivéve, hogy a proxyosztályt vector<bool>::referencehasználja. Lásd még operator[]. |
Proxyosztály
| Név | Leírás |
|---|---|
vector<bool>::reference osztály |
Egy olyan osztály, amely proxyként működik a viselkedés szimulálásához bool& , és amelynek objektumai hivatkozásokat adhatnak egy vector<bool> objektum elemeire (egy bitre). |
Követelmények
Fejléc: <vector>
Névtér:std
vector<bool>::const_pointer
Olyan típus, amely egy objektumot ír le, amely állandó mutatóként szolgálhat az objektum által vector<bool> tartalmazott sorozat logikai eleméhez.
typedef const_iterator const_pointer;
vector<bool>::const_reference
Olyan típus, amely egy objektumot ír le, amely állandó hivatkozásként szolgálhat az objektum által vector<bool> tartalmazott sorozat logikai elemére.
typedef bool const_reference;
Megjegyzések
További információkért és példakódért lásd: vector<bool>::reference::operator=.
vector<bool>::flip
Egy adott bit összes bitét vector<bool>megfordítja.
void flip();
példa
// 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[]
Szimulált hivatkozást ad vissza egy adott pozícióban lévő vector<bool> elemre.
vector<bool>::reference operator[](size_type Pos);
vector&<bool&>::const_reference operator[](size_type Pos) const;
Paraméterek
Pos
Az elem pozíciója vector<bool> .
Visszaadott érték
Az vector<bool>::reference indexelt elem értékét tartalmazó objektum.vector<bool>::const_reference
Ha a megadott pozíció nagyobb vagy egyenlő a tároló méretével, az eredmény nincs meghatározva.
Megjegyzések
Ha készlettel _ITERATOR_DEBUG_LEVEL fordít, futásidejű hiba lép fel, ha a vektor határain kívüli elemet próbál elérni. További információ: Ellenőrzött iterátorok.
példa
Ez a példakód bemutatja a helyes használatot vector<bool>::operator[] és két gyakori kódolási hibát, amelyek megjegyzésként jelennek meg. Ezek a hibák hibát okoznak, mert a vector<bool>::reference visszaadott objektum vector<bool>::operator[] címe nem vehető fel.
// 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
Olyan típus, amely egy objektumot ír le, amely az objektum által vector<bool> tartalmazott sorozat logikai elemére mutató mutatóként szolgálhat.
typedef iterator pointer;
vector<bool>::reference osztály
Az vector<bool>::reference osztály egy proxyosztály, amelyet az vector<bool> osztály biztosít szimulálni bool&.
Megjegyzések
Szimulált hivatkozásra van szükség, mert a C++ natív módon nem engedélyezi a bitekre mutató közvetlen hivatkozásokat.
vector<bool> Elemenként csak egy bitet használ, amely erre a proxyosztályra hivatkozhat. A referenciaszimuláció azonban nem fejeződött be, mert bizonyos hozzárendelések érvénytelenek. Mivel például az vector<bool>::reference objektum címe nem vehető fel, a következő kód vector<bool>::operator[] nem helyes:
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
Egy hivatkozott vector<bool> elem logikai értékének megfordítása.
void flip();
példa
// 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
Implicit konverziót biztosít a helyről a .-ra vector<bool>::referencebool.
operator bool() const;
Visszaadott érték
Az objektum elemének vector<bool> logikai értéke.
Megjegyzések
Ez az vector<bool> operátor nem módosíthatja az objektumot.
vector<bool>::reference::operator=
Logikai értéket rendel egy bithez, vagy egy hivatkozott elem által egy bithez tartott értéket.
reference& operator=(const reference& Right);
reference& operator=(bool Val);
Paraméterek
Right
Az elemhivatkozás, amelynek értékét hozzá kell rendelni a bithez.
Val
A bithez rendelendő logikai érték.
példa
// 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
Statikus tagfüggvény, amely a logikai vektorok (vector<bool>) két elemét cseréli le a proxyosztály vector<bool>::referencehasználatával.
static void swap(
reference Left,
reference Right);
Paraméterek
Left
Az elemmel kicserélendő Right elem.
Right
Az elemmel kicserélendő Left elem.
Megjegyzések
Ez a túlterhelés támogatja a speciális proxykövetelményeket.vector<bool>
vector::A felcserélés ugyanazzal a funkcióval rendelkezik, mint a vector<bool>::swap().
Lásd még
Szálbiztonság a C++ Standard könyvtárban
Standard C++ kódtár-referenciák