Partilhar via


vector<bool> Classe

A vector<bool> classe é uma especialização parcial de vector para elementos do tipo bool. Ele tem um alocador para o tipo subjacente que é usado pela especialização, que fornece otimização de espaço armazenando um bool valor por bit.

Sintaxe

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

Observações

Esta especialização de modelo de classe se comporta como vector, exceto pelas diferenças explicadas neste artigo.

As operações que lidam com o bool tipo correspondem a valores no armazenamento do contêiner. allocator_traits::construct não é usado para construir esses valores.

Typedefs (definições de tipos)

Nome do tipo Descrição
const_pointer Um typedef para um const_iterator que pode servir como um ponteiro constante para um elemento booleano do vector<bool>.
const_reference Um typedef para bool. Após a inicialização, ele não observa atualizações para o valor original.
pointer Um typedef para um iterator que pode servir como um ponteiro para um elemento booleano do vector<bool>.

Funções de membro

Função de membro Descrição
flip Inverte todos os bits no vector<bool>.
swap Troca os elementos de dois vector<bool>s.
operator[] Retorna uma referência simulada vector<bool> ao elemento em uma posição especificada.
at Funciona da mesma forma que a função ::at não especializada vector, exceto que ela usa a classe vector<bool>::referenceproxy . Ver também operator[].
front Funciona da mesma forma que a função não especializada vector::front, exceto que ela usa a classe vector<bool>::referenceproxy . Ver também operator[].
back Funciona da mesma forma que a função não especializada vector::back, exceto que ela usa a classe vector<bool>::referenceproxy . Ver também operator[].

Proxy Classe

Nome Descrição
vector<bool>::reference Classe Uma classe que atua como um proxy para simular bool& o comportamento e cujos objetos podem fornecer referências a elementos (bits únicos) dentro de um vector<bool> objeto.

Requerimentos

Cabeçalho: <vector>

Espaço de nomes: std

vector<bool>::const_pointer

Um tipo que descreve um objeto que pode servir como um ponteiro constante para um elemento booleano da sequência contida pelo vector<bool> objeto.

typedef const_iterator const_pointer;

vector<bool>::const_reference

Um tipo que descreve um objeto que pode servir como uma referência constante a um elemento booleano da sequência contida pelo vector<bool> objeto.

typedef bool const_reference;

Observações

Para obter mais informações e exemplos de código, consulte vector<bool>::reference::operator=.

vector<bool>::flip

Reverte todos os bits em um vector<bool>arquivo .

void flip();

Exemplo

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

Retorna uma referência simulada vector<bool> ao elemento em uma posição especificada.

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

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

Parâmetros

Pos
A posição do vector<bool> elemento.

Valor de retorno

Um vector<bool>::reference ou vector<bool>::const_reference objeto que contém o valor do elemento indexado.

Se a posição especificada for maior ou igual ao tamanho do recipiente, o resultado será indefinido.

Observações

Se você compilar com _ITERATOR_DEBUG_LEVEL set, ocorrerá um erro em tempo de execução se você tentar acessar um elemento fora dos limites do vetor. Para obter mais informações, consulte Iteradores verificados.

Exemplo

Este exemplo de código mostra o uso correto e dois erros comuns de vector<bool>::operator[] codificação, que são comentados. Esses erros causam erros porque o endereço do vector<bool>::reference objeto que vector<bool>::operator[] retorna não pode ser usado.

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

Um tipo que descreve um objeto que pode servir como um ponteiro para um elemento booleano da sequência contida pelo vector<bool> objeto.

typedef iterator pointer;

vector<bool>::reference Classe

A vector<bool>::reference classe é uma classe proxy fornecida pela vector<bool> classe para simular bool&.

Observações

Uma referência simulada é necessária porque o C++ não permite nativamente referências diretas a bits. vector<bool> usa apenas um bit por elemento, que pode ser referenciado usando essa classe proxy. No entanto, a simulação de referência não está concluída porque certas atribuições não são válidas. Por exemplo, como o endereço do vector<bool>::reference objeto não pode ser usado, o código a seguir usado vector<bool>::operator[] não está correto:

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

Inverte o valor booleano de um elemento referenciado vector<bool> .

void flip();

Exemplo

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

Fornece uma conversão implícita de vector<bool>::reference para bool.

operator bool() const;

Valor de retorno

O valor booleano do elemento do vector<bool> objeto.

Observações

O vector<bool> objeto não pode ser modificado por este operador.

vector<bool>::reference::operator=

Atribui um valor booleano a um bit ou o valor mantido por um elemento referenciado a um bit.

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

Parâmetros

Right
A referência de elemento cujo valor deve ser atribuído ao bit.

Val
O valor booleano a ser atribuído ao bit.

Exemplo

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

Função de membro estático que troca dois elementos de vetores booleanos (vector<bool>) usando a classe vector<bool>::referenceproxy .

static void swap(
    reference Left,
    reference Right);

Parâmetros

Left
O elemento a ser trocado com o Right elemento .

Right
O elemento a ser trocado com o Left elemento .

Observações

Essa sobrecarga suporta os requisitos especiais de proxy do vector<bool>. vector::swap tem a mesma funcionalidade que a sobrecarga de argumento único de vector<bool>::swap().

Ver também

segurança de threads na biblioteca padrão C++
Referência da Biblioteca Padrão C++