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