Classe vector<bool>
A classe vector<bool>
é uma especialização parcial de vector
para elementos do tipo bool
. Ela tem um alocador para o tipo subjacente que é usado pela especialização, que fornece otimização de espaço ao armazenar um valor bool
por bit.
Sintaxe
template <class Allocator = allocator<bool>>
class vector<bool, Allocator>
Comentários
Essa especialização de modelo de classe se comporta como vector
, exceto por diferenças explicadas neste artigo.
As operações que lidam com o tipo bool
correspondem a valores no armazenamento do contêiner. allocator_traits::construct
não é usado para construir esses valores.
Typedefs
Nome do tipo | Descrição |
---|---|
const_pointer |
Um typedef para um const_iterator que pode funcionar como um ponteiro de constante para um elemento booliano do vector<bool> . |
const_reference |
Um typedef para bool . Depois da inicialização, ele não observa atualizações no valor original. |
pointer |
Um typedef para um iterator que pode funcionar como um ponteiro para um elemento booliano 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 para o elemento vector<bool> em uma posição especificada. |
at |
Funciona da mesma forma que a função não especializada vector ::at, exceto que ela usa a classe de proxy vector<bool>::reference . Consulte também operator[] . |
front |
Funciona da mesma forma que a função não especializada vector ::front, exceto que ela usa a classe de proxy vector<bool>::reference . Consulte também operator[] . |
back |
Funciona da mesma forma que a função não especializada vector ::back, exceto que ela usa a classe de proxy vector<bool>::reference . Consulte também operator[] . |
Classe proxy
Nome | Descrição |
---|---|
Classe vector<bool>::reference |
Uma classe que atua como um proxy para simular o comportamento de bool& e cujos objetos podem fornecer referências a elementos (bits únicos) em um objeto vector<bool> . |
Requisitos
Cabeçalho: <vector>
Namespace: std
vector<bool>::const_pointer
Um tipo que descreve um objeto que pode servir como um ponteiro de constante para um elemento booliano da sequência contida pelo objeto vector<bool>
.
typedef const_iterator const_pointer;
vector<bool>::const_reference
Um tipo que descreve um objeto que pode servir como uma referência de constante para um elemento booliano da sequência contida pelo objeto vector<bool>
.
typedef bool const_reference;
Comentários
Para mais informações e exemplos de código, consulte vector<bool>::reference::operator=
.
vector<bool>::flip
Inverte todos os bits em um vector<bool>
.
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 para o elemento vector<bool>
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 elemento vector<bool>
.
Valor de retorno
Um objeto vector<bool>::reference
ou vector<bool>::const_reference
que contém o valor do elemento indexado.
Se a posição especificada for maior ou igual ao tamanho do contêiner, o resultado será indefinido.
Comentários
Se você compilar com _ITERATOR_DEBUG_LEVEL
definido, um erro de tempo de execução ocorrerá 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 vector<bool>::reference
endereço do 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 booliano da sequência contida pelo objeto vector<bool>
.
typedef iterator pointer;
Classe vector<bool>::reference
A classe vector<bool>::reference
é uma classe proxy fornecida pela classe vector<bool>
para simular bool&
.
Comentários
Uma referência simulada é necessária porque o C++ não permite nativamente referências diretas aos 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 é concluída porque determinadas atribuições não são válidas. Por exemplo, como o vector<bool>::reference
endereço do objeto não pode ser usado, o seguinte código que usa 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 booliano de um elemento vector<bool>
referenciado.
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
em bool
.
operator bool() const;
Valor de retorno
O valor booliano do elemento do objeto vector<bool>
.
Comentários
O vector<bool>
objeto não pode ser modificado por esse operador.
vector<bool>::reference::operator=
Atribui um valor booliano a um bit ou o valor mantido por um elemento referenciado para 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 booliano 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
A função membro estática que troca dois elementos de vetores boolianos (vector<bool>
) usando a classe de proxy vector<bool>::reference
.
static void swap(
reference Left,
reference Right);
Parâmetros
Left
O elemento a ser trocado pelo elemento Right
.
Right
O elemento a ser trocado pelo elemento Left
.
Comentários
Essa sobrecarga oferece suporte aos requisitos especiais de proxy do vector<bool>
. vector
::swap tem a mesma funcionalidade que a sobrecarga de argumento único de vector<bool>::swap()
.
Confira também
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++