Bagikan melalui


vector<bool> Kelas

Kelas vector<bool> adalah spesialisasi parsial untuk vector elemen jenis bool. Ini memiliki alokator untuk jenis yang mendasar yang digunakan oleh spesialisasi, yang menyediakan pengoptimalan ruang dengan menyimpan satu bool nilai per bit.

Sintaks

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

Keterangan

Spesialisasi templat kelas ini berulah seperti vector, kecuali untuk perbedaan yang dijelaskan dalam artikel ini.

Operasi yang menangani jenis sesuai dengan bool nilai dalam penyimpanan kontainer. allocator_traits::construct tidak digunakan untuk membangun nilai-nilai ini.

Typedefs

Nama jenis Deskripsi
const_pointer Typedef ke yang const_iterator dapat berfungsi sebagai penunjuk konstan ke elemen Boolean dari vector<bool>.
const_reference Typedef untuk bool. Setelah inisialisasi, ini tidak mengamati pembaruan ke nilai asli.
pointer Typedef ke yang iterator dapat berfungsi sebagai penunjuk ke elemen Boolean dari vector<bool>.

Fungsi anggota

Fungsi anggota Deskripsi
flip Membalikkan semua bit dalam vector<bool>.
swap Menukar elemen dua vector<bool>s.
operator[] Mengembalikan referensi yang disimulasikan ke elemen pada vector<bool> posisi tertentu.
at Fungsinya sama dengan fungsi ::at yang tidak dispesialisasikan vector, kecuali menggunakan kelas vector<bool>::referenceproksi . operator[]Lihat juga .
front Fungsinya sama dengan fungsi ::front yang tidak dispesialisasikan vector, kecuali menggunakan kelas vector<bool>::referenceproksi . operator[]Lihat juga .
back Fungsinya sama dengan fungsi ::back yang tidak dispesialisasikan vector, kecuali menggunakan kelas vector<bool>::referenceproksi . operator[]Lihat juga .

Kelas Proksi

Nama Deskripsi
vector<bool>::reference Kelas Kelas yang bertindak sebagai proksi untuk mensimulasikan bool& perilaku, dan yang objeknya dapat memberikan referensi ke elemen (bit tunggal) dalam vector<bool> objek.

Persyaratan

Header: <vector>

kumpulan nama XML: std

vector<bool>::const_pointer

Jenis yang menjelaskan objek yang dapat berfungsi sebagai penunjuk konstan ke elemen Boolean dari urutan yang dimuat oleh vector<bool> objek.

typedef const_iterator const_pointer;

vector<bool>::const_reference

Jenis yang menjelaskan objek yang dapat berfungsi sebagai referensi konstan ke elemen Boolean dari urutan yang terkandung oleh vector<bool> objek.

typedef bool const_reference;

Keterangan

Untuk informasi selengkapnya dan contoh kode, lihat vector<bool>::reference::operator=.

vector<bool>::flip

Membalikkan semua bit dalam .vector<bool>

void flip();

Contoh

// 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[]

Mengembalikan referensi yang disimulasikan ke elemen pada vector<bool> posisi tertentu.

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

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

Parameter

Pos
Posisi vector<bool> elemen .

Tampilkan Nilai

Objek vector<bool>::reference atau vector<bool>::const_reference yang berisi nilai elemen terindeks.

Jika posisi yang ditentukan lebih besar dari atau sama dengan ukuran kontainer, hasilnya tidak ditentukan.

Keterangan

Jika Anda mengkompilasi dengan _ITERATOR_DEBUG_LEVEL set, kesalahan run-time terjadi jika Anda mencoba mengakses elemen di luar batas vektor. Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.

Contoh

Contoh kode ini menunjukkan penggunaan vector<bool>::operator[] yang benar dan dua kesalahan pengodean umum, yang dikomentari. Kesalahan ini menyebabkan kesalahan karena alamat vector<bool>::reference objek yang vector<bool>::operator[] mengembalikan tidak dapat diambil.

// 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

Jenis yang menjelaskan objek yang dapat berfungsi sebagai penunjuk ke elemen Boolean dari urutan yang terkandung oleh vector<bool> objek.

typedef iterator pointer;

vector<bool>::reference Kelas

Kelas vector<bool>::reference adalah kelas proksi yang disediakan oleh vector<bool> Kelas untuk mensimulasikan bool&.

Keterangan

Referensi yang disimulasikan diperlukan karena C++ tidak secara asli mengizinkan referensi langsung ke bit. vector<bool> hanya menggunakan satu bit per elemen, yang dapat dirujuk dengan menggunakan kelas proksi ini. Namun, simulasi referensi tidak selesai karena penugasan tertentu tidak valid. Misalnya, karena alamat vector<bool>::reference objek tidak dapat diambil, kode berikut yang menggunakan vector<bool>::operator[] tidak benar:

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

Membalikkan nilai Boolean dari elemen yang direferensikan vector<bool> .

void flip();

Contoh

// 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

Menyediakan konversi implisit dari vector<bool>::reference ke bool.

operator bool() const;

Tampilkan Nilai

Nilai Boolean dari elemen vector<bool> objek.

Keterangan

Objek vector<bool> tidak dapat dimodifikasi oleh operator ini.

vector<bool>::reference::operator=

Menetapkan nilai Boolean ke sedikit, atau nilai yang dipegang oleh elemen yang direferensikan ke sedikit.

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

Parameter

Right
Referensi elemen yang nilainya akan ditetapkan ke bit.

Val
Nilai Boolean yang akan ditetapkan ke bit.

Contoh

// 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

Fungsi anggota statis yang bertukar dua elemen vektor Boolean ( vector<bool>) dengan menggunakan kelas vector<bool>::referenceproksi .

static void swap(
    reference Left,
    reference Right);

Parameter

Left
Elemen yang akan ditukar dengan Right elemen .

Right
Elemen yang akan ditukar dengan Left elemen .

Keterangan

Kelebihan beban ini mendukung persyaratan proksi khusus dari vector<bool>. vector::swap memiliki fungsionalitas yang sama dengan kelebihan beban argumen tunggal .vector<bool>::swap()

Lihat juga

Keamanan utas di Pustaka Standar C++
Referensi pustaka standar C++