Bonjour,
En programmant sur mon projet, je me suis heurté à une spécificité de la STL que j'ai trouvé pour le moins étrange. En utilisant un vector<bool>, je pensais pouvoir récupérer le premier élément en faisant ceci: &vec[0], cependant le standard en a décidé autrement et je pensais qu'il était utile de le spécifier dans la FAQ.
"vector<bool>"
Le standard de la norme de C++ a décidé d'optimiser le stockage des booléens dans un std::vector. Ainsi ne vous attendez pas à pouvoir récupérer facilement le un std::vector<bool> via &vec[0]. En effet, ce dernier garde en mémoire les booléens bits à bits.
Il est possible de passer au travers de cette optimisation plus ou moins bancale (cela peut créer des comportement indéterminés dans les programmes pour ceux qui ne savent pas), vous pouvez spécifier un nouvel allocateur en faisant:
typedef std::vector<bool, myallocator> vectorbool;
Bon j'espère que vous trouverez aussi cette information utile, et j'espère qu'elle n'y est pas déjà! Pour plus d'information: Lien
Partager