Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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++