Compartir por


Clase vector<bool>

La clase vector<bool> es una especialización parcial de vector para los elementos de tipo bool. Tiene un asignador para el tipo subyacente que utiliza la especialización, que proporciona optimización de espacio porque almacena un valor bool por bit.

Sintaxis

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

Comentarios

Esta especialización de la plantilla de clase se comporta como vector, salvo por las diferencias que se explican en este artículo.

Las operaciones que se ocupan del tipo bool corresponden a los valores del almacén del contenedor. allocator_traits::construct no se utiliza para construir estos valores.

Typedefs

Nombre de tipo Descripción
const_pointer Una definición de tipo a un const_iterator que puede servir como puntero constante para un elemento booleano de vector<bool>.
const_reference Una definición de tipo para bool. Después de la inicialización, no respeta actualizaciones al valor original.
pointer Una definición de tipo para iterator que puede servir como puntero a un elemento booleano de vector<bool>.

Funciones miembro

Función de miembro Descripción
flip Invierte todos los bits de vector<bool>.
swap Intercambia los elementos de dos vector<bool>.
operator[] Devuelve una referencia simulada al elemento vector<bool> en una posición especificada.
at Funciona igual que la función no especializada vector::at, pero usa la clase de proxy vector<bool>::reference. Vea también operator[].
front Funciona igual que la función no especializada vector::front, pero usa la clase de proxy vector<bool>::reference. Vea también operator[].
back Funciona igual que la función no especializada vector::back, pero usa la clase de proxy vector<bool>::reference. Vea también operator[].

Clase proxy

Nombre Descripción
vector<bool>::reference (clase) Una clase que actúa como proxy para simular el comportamiento de bool& y cuyos objetos pueden proporcionar referencias a elementos (bits únicos) dentro de un objeto vector<bool>.

Requisitos

Encabezado: <vector>

Espacio de nombres: std

vector<bool>::const_pointer

Tipo que describe un objeto que puede actuar como puntero constante a un elemento booleano de la secuencia que contiene el objeto vector<bool>.

typedef const_iterator const_pointer;

vector<bool>::const_reference

Tipo que describe un objeto que puede actuar como referencia constante a un elemento booleano de la secuencia que contiene el objeto vector<bool>.

typedef bool const_reference;

Comentarios

Para obtener más información y ejemplos de código, vea vector<bool>::reference::operator=.

vector<bool>::flip

Invierte todos los bits de vector<bool>.

void flip();

Ejemplo

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

Devuelve una referencia simulada al elemento vector<bool> en una posición especificada.

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

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

Parámetros

Pos
Posición del elemento vector<bool>.

Valor devuelto

vector<bool>::reference o vector<bool>::const_reference que contiene el valor del elemento indizado.

Si la posición especificada es mayor o igual que el tamaño del contenedor, el resultado es sin definir.

Comentarios

Si compila con _ITERATOR_DEBUG_LEVEL, se genera un error en tiempo de ejecución si intenta tener acceso a un elemento fuera de los límites del vector. Para más información, vea Iteradores activados.

Ejemplo

En este ejemplo de código se muestra el uso correcto de y dos errores comunes de vector<bool>::operator[] codificación, que se comentan. Estos errores provocan errores porque no se puede tomar la dirección del vector<bool>::reference objeto que vector<bool>::operator[] devuelve.

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

Un tipo que describe un objeto que puede actuar como puntero a un elemento booleano de la secuencia contenida en el objeto vector<bool>.

typedef iterator pointer;

Clase vector<bool>::reference

La clase vector<bool>::reference es una clase de proxy proporcionada por la clase vector<bool> para simular bool&.

Comentarios

Se requiere una referencia simulada porque C++ no permite de forma nativa referencias directas a bits. vector<bool> solo utiliza un bit por elemento, al que se puede hacer referencia mediante esta clase proxy. Sin embargo, la simulación de referencia no se completa porque algunas asignaciones no son válidas. Por ejemplo, dado que no se puede tomar la dirección del vector<bool>::reference objeto, el código siguiente que usa vector<bool>::operator[] no es correcto:

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

Invierte el valor booleano de un elemento de referencia vector<bool>.

void flip();

Ejemplo

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

Proporciona una conversión implícita de vector<bool>::reference en bool.

operator bool() const;

Valor devuelto

Valor booleano del elemento del objeto vector<bool>.

Comentarios

Este operador no puede modificar el vector<bool> objeto .

vector<bool>::reference::operator=

Asigna un valor booleano a un bit o asigna el valor contenido en un elemento al que se hace referencia a un bit.

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

Parámetros

Right
Referencia del elemento cuyo valor se asigna al bit.

Val
Valor booleano que se asigna al bit.

Ejemplo

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

Función miembro estática que intercambia dos elementos de vectores booleanos (vector<bool>) mediante la clase de proxy vector<bool>::reference.

static void swap(
    reference Left,
    reference Right);

Parámetros

Left
Elemento que se va a intercambiar con el elemento Right.

Right
Elemento que se va a intercambiar con el elemento Left.

Comentarios

Esta sobrecarga admite los requisitos de proxy especial de vector<bool>. vector::swap tiene la misma funcionalidad que la sobrecarga de un solo argumento de vector<bool>::swap().

Consulte también

Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++