Megosztás:


vector<bool> osztály

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