Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vector et bool

8 réponses
Avatar
Cyril.Gruau
Est-que je suis condamne a ne pas utiliser un

template<class T> T & operator[]

sur un vector<T> si je veux que ca fonctionne avec T = bool ?

Car g++ souleve l'erreur suivante a la compilation :

could not convert 'vector<bool, _Alloc>::operator[](i)' to 'bool &'

Cyril

8 réponses

Avatar
Cyril.Gruau
std::vector<bool> est specialise (23.2.5) pour optimise la place
memoire (autrement dit un bit par element) et operator[] renvoie un
std::vector<bool>::reference.


Qui ne permet de faire :

MaClasse<bool> MonObjet(taille);

MonObjet[i] = 1;

Cyril

Avatar
Vincent Lascaux
Qui ne permet de faire :

MaClasse<bool> MonObjet(taille);

MonObjet[i] = 1;


C'est quoi MaClasse ?

Avatar
Fabien LE LEZ
On Mon, 28 Jul 2003 11:58:53 GMT, (Cyril
Gruau) wrote:

template<class T> T & operator[]

sur un vector<T> si je veux que ca fonctionne avec T = bool ?


Yep. Une des aberrations du C++...
Mais std::deque<> répond peut-être à tes besoins.


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
Gabriel Dos Reis
(Cyril Gruau) writes:

| Est-que je suis condamne a ne pas utiliser un
|
| template<class T> T & operator[]
|
| sur un vector<T> si je veux que ca fonctionne avec T = bool ?

Yep, tu ne dois pas supposer que le type de retour est forcément T& ou
const T&. C'est une bataille qu'on a perdue -- faute de combattants.

Mais tu peux utiliser std::vector<char>, si cela peut faire l'affaire.

-- Gaby
Avatar
Jean-Marc Bourguet
(Cyril Gruau) writes:

template<class T> class MaClasse
{

public:
MaClasse<T>(int taille) :Tableau(taille) {}

T & operator[](int i) { return Tableau[i]; }


Un moyen de faire passer avec bool:

vector<T>::reference operator[](int i) { return Tableau[i];}

mais tout depend du reste du programme.

private:
vector<T> Tableau;
};


A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Gabriel Dos Reis
"Michael Monerau" writes:

| Gabriel Dos Reis wrote:
| > (Cyril Gruau) writes:
| >
| >> Est-que je suis condamne a ne pas utiliser un
| >>
| >> template<class T> T & operator[]
| >>
| >> sur un vector<T> si je veux que ca fonctionne avec T = bool ?
| >
| > Yep, tu ne dois pas supposer que le type de retour est forcément T& ou
| > const T&. C'est une bataille qu'on a perdue -- faute de combattants.
|
| Alors, à quoi sert un vector<bool>

un attrape-nigaud et un thème de débat sur les news :-)

| et comment l'utiliser (seulement par itérateurs ?).

En général, normalement. Tand qu'on fait pas un truc qui a l'air de
supposer qu'on travaille avec des vecteurs.

-- Gaby
Avatar
Michael Monerau
Gabriel Dos Reis wrote:
"Michael Monerau" writes:

Gabriel Dos Reis wrote:
(Cyril Gruau) writes:

Est-que je suis condamne a ne pas utiliser un

template<class T> T & operator[]

sur un vector<T> si je veux que ca fonctionne avec T = bool ?


Yep, tu ne dois pas supposer que le type de retour est forcément T&
ou const T&. C'est une bataille qu'on a perdue -- faute de
combattants.


Alors, à quoi sert un vector<bool>


un attrape-nigaud et un thème de débat sur les news :-)


c'est déjà pas mal :)

et comment l'utiliser (seulement par itérateurs ?).


En général, normalement. Tand qu'on fait pas un truc qui a l'air de
supposer qu'on travaille avec des vecteurs.


OK, je n'avais pas réalisé le clash entre bit (retour) et bool (type T). Je
vois maintenant, et c'est vrai que...
Au fait, c'est quoi le retour de l'opérateur [] sur avec T == bool alors ?
--
<=-Michaël"Cortex" Monerau.-=>




Avatar
Gabriel Dos Reis
"Michael Monerau" writes:


| Au fait, c'est quoi le retour de l'opérateur [] sur avec T == bool alors ?

La classe proxy vector<bool>::reference (ou la version const, c'est selon).

-- Gaby