std:: vector<bool>
|
Défini dans l'en-tête
<vector>
|
||
|
template
<
class
Allocator
|
||
std
::
vector
<
bool
>
est une spécialisation potentiellement efficace en termes d'espace de
std::vector
pour le type
bool
.
La manière dont
std
::
vector
<
bool
>
est rendue efficace en termes d'espace (ainsi que le fait qu'elle soit optimisée ou non) est définie par l'implémentation. Une optimisation potentielle consiste à regrouper les éléments du vecteur de telle sorte que chaque élément occupe un seul bit au lieu de
sizeof
(
bool
)
octets.
std
::
vector
<
bool
>
se comporte de manière similaire à
std::vector
, mais pour être efficace en termes d'espace, il :
- Ne stocke pas nécessairement ses éléments sous forme de tableau contigu.
-
Expose la classe
std
::
vector< bool > ::referencecomme méthode d'accès aux bits individuels. En particulier, les objets de cette classe sont retournés par operator[] par valeur. - N'utilise pas std :: allocator_traits :: construct pour construire les valeurs de bits.
- Ne garantit pas que différents éléments dans le même conteneur puissent être modifiés simultanément par différents threads.
Table des matières |
Types membres
| Type de membre | Définition | ||||
value_type
|
bool | ||||
allocator_type
|
Allocator
|
||||
size_type
|
défini par l'implémentation | ||||
difference_type
|
défini par l'implémentation | ||||
|
classe proxy représentant une référence à un
bool
(classe) |
|||||
const_reference
|
bool | ||||
pointer
|
défini par l'implémentation | ||||
const_pointer
|
défini par l'implémentation | ||||
iterator
|
|
||||
const_iterator
|
|
||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
Fonctions membres
construit le
vector
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
détruit le
vector
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
assigne des valeurs au conteneur
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
assigne des valeurs au conteneur
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
(C++23)
|
assigne une plage de valeurs au conteneur
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
retourne l'allocateur associé
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
Accès aux éléments |
|
|
accéder à l'élément spécifié avec vérification des limites
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
accéder à l'élément spécifié
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
accéder au premier élément
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
accéder au dernier élément
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
Itérateurs |
|
|
(C++11)
|
retourne un itérateur vers le début
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
(C++11)
|
retourne un itérateur vers la fin
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
(C++11)
|
retourne un itérateur inverse vers le début
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
(C++11)
|
retourne un itérateur inverse vers la fin
(fonction membre publique de
std::vector<T,Allocator>
)
|
Capacité |
|
|
vérifie si le conteneur est vide
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
retourne le nombre d'éléments
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
retourne le nombre maximum possible d'éléments
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
réserve de l'espace mémoire
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
retourne le nombre d'éléments pouvant être contenus dans le stockage actuellement alloué
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
Modificateurs |
|
|
efface le contenu
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
insère des éléments
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
(C++23)
|
insère une plage d'éléments
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
(C++23)
|
ajoute une plage d'éléments à la fin
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
(C++11)
|
construit un élément en place
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
efface les éléments
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
ajoute un élément à la fin
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
(C++11)
|
construit un élément en place à la fin
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
supprime le dernier élément
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
modifie le nombre d'éléments stockés
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
échange le contenu
(fonction membre publique de
std::vector<T,Allocator>
)
|
|
|
|
|
inverse tous les bits
(fonction membre publique) |
|
|
[static]
|
échange deux
std::vector<bool>::
reference
s
(fonction membre publique statique) |
Fonctions non membres
|
(supprimé en C++20)
(supprimé en C++20)
(supprimé en C++20)
(supprimé en C++20)
(supprimé en C++20)
(C++20)
|
compare lexicographiquement les valeurs de deux
vector
s
(modèle de fonction) |
|
spécialise l'algorithme
std::swap
(modèle de fonction) |
|
|
efface tous les éléments satisfaisant des critères spécifiques
(modèle de fonction) |
Classes d'assistance
|
(C++11)
|
Prise en charge du hachage pour
std
::
vector
<
bool
>
(spécialisation de modèle de classe) |
Guides de déduction (C++17)
Notes
Si la taille du bitset est connue à la compilation,
std::bitset
peut être utilisé, qui offre un ensemble plus riche de fonctions membres. De plus,
boost::dynamic_bitset
existe comme alternative à
std
::
vector
<
bool
>
.
Puisque sa représentation peut être optimisée,
std
::
vector
<
bool
>
ne satisfait pas nécessairement toutes les exigences
Container
ou
SequenceContainer
. Par exemple, parce que
std
::
vector
<
bool
>
::
iterator
est défini par l'implémentation, il peut ne pas satisfaire l'exigence
LegacyForwardIterator
. L'utilisation d'algorithmes tels que
std::search
qui nécessitent des
LegacyForwardIterator
s
peut entraîner
des erreurs à la compilation ou à l'exécution
.
La
version Boost.Container de
vector
ne spécialise pas pour
bool
.
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construction et insertion de gammes pour les conteneurs |
Exemple
#include <cassert> #include <initializer_list> #include <iostream> #include <vector> void println(auto rem, const std::vector<bool>& vb) { std::cout << rem << " = ["; for (std::size_t t{}; t != vb.size(); ++t) std::cout << (t ? ", " : "") << vb[t]; std::cout << "]\n"; } int main() { std::vector<bool> v1; // crée un vecteur vide de valeurs booléennes println("1) v1", v1); std::vector<bool> v2{0, 1, 1, 0, 1}; // crée un vecteur rempli println("2) v2", v2); v1 = v2; // copie v2 vers v1 println("3) v1", v1); assert(v1.size() == v2.size()); // vérifie que les tailles de v1 et v2 sont égales assert(v1.front() == false); // accède au premier élément, équivalent à : assert(v1[0] == false); assert(v1.back() == true); // accède au dernier élément, équivalent à : assert(v1[v1.size() - 1] == true); v1 = {true, true, false, false}; // assigne une liste d'initialisation println("4) v1", v1); v1.push_back(true); // ajoute un élément à la fin println("5) v1", v1); v1.pop_back(); // supprime un élément de la fin println("6) v1", v1); v1.flip(); // inverse tous les éléments println("7) v1", v1); v1.resize(8, true); // redimensionne v1 ; les nouveaux éléments sont définis sur « true » println("8) v1", v1); v1.clear(); // efface v1 assert(v1.empty()); // vérifie que v1 est vide }
Sortie :
1) v1 = [] 2) v2 = [0, 1, 1, 0, 1] 3) v1 = [0, 1, 1, 0, 1] 4) v1 = [1, 1, 0, 0] 5) v1 = [1, 1, 0, 0, 1] 6) v1 = [1, 1, 0, 0] 7) v1 = [0, 0, 1, 1] 8) v1 = [0, 0, 1, 1, 1, 1, 1, 1]
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2187 | C++11 |
les spécialisations pour
bool
manquaient des fonctions membres
emplace
et
emplace_back
|
ajoutées |