Cherche a definir tableau bidimensionel de booleens.
Fermé
feraudyh
Messages postés
70
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
3 mars 2023
-
2 juil. 2014 à 19:00
feraudyh Messages postés 70 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 3 mars 2023 - 2 juil. 2014 à 22:37
feraudyh Messages postés 70 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 3 mars 2023 - 2 juil. 2014 à 22:37
A voir également:
- Cherche a definir tableau bidimensionel de booleens.
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Définir google comme page d'accueil - Guide
5 réponses
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
2 juil. 2014 à 20:29
2 juil. 2014 à 20:29
'lut, pour ta "mise a jour" de code, c'est pas plus spécialement plus propre vu que tu as précisé dans ton premier constructeur de vector la taille qu'il doit avoir...
Utiliser des vector est une idée, mais un vecteur de pointeurs n'en est pas une bonne: il faut alors gérer à la main la désallocation de chaque élément. Soit, comme tu utilises du C++11, tu te sers de
D'ailleurs, si tu ne prévois pas de pouvoir redimensionner ton tableau 2D, considère l'utilisation d'un seul et unique vecteur, voire si tu souhaites/peut faire de la gestion mémoire manuelle, d'un
Autre chose: utilise les initialiseurs dans ton constructeur:
Utiliser des vector est une idée, mais un vecteur de pointeurs n'en est pas une bonne: il faut alors gérer à la main la désallocation de chaque élément. Soit, comme tu utilises du C++11, tu te sers de
std::unique_pointer<std::vector<bool>>, soit tu transformes ton vecteur en
std::vector<std::vector<bool>>"simple" auquel cas ton initialisation se fait juste avec
Map = new std::vector<std::vector<bool>>(hauteur, vector<bool>(largeur, false));.
D'ailleurs, si tu ne prévois pas de pouvoir redimensionner ton tableau 2D, considère l'utilisation d'un seul et unique vecteur, voire si tu souhaites/peut faire de la gestion mémoire manuelle, d'un
Map = new bool[hauteur*largeur]en constructeur et
delete[] Map;en destructeur (c'est aussi possible avec un
std::unique_ptrmais il faut préciser un destructeur pour ton tableau), puis pour accéder à l'élément (x, y), tu fais
x+y*m_largeur.
Autre chose: utilise les initialiseurs dans ton constructeur:
TableBool2D::TableBool2D(int hauteur, int largeur) : m_hauteur(hauteur), m_largeur(largeur) { ... // Du coup, on vire ces lignes: //m_hauteur = hauteur; //m_largeur = largeur; }
feraudyh
Messages postés
70
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
3 mars 2023
6
2 juil. 2014 à 20:06
2 juil. 2014 à 20:06
J'ai remplacé les lignes
par
Map = new std::vector< std::vector<bool> * >(hauteur, nullptr);
for(int i = 0; i < hauteur; i++)
Map->at(i) = new std::vector<bool>(largeur,false);
par
Map = new std::vector< std::vector<bool> * >;Est ce que vous trouvez que c'est plus propre?
for (int i = 0; i < hauteur; i++)
Map->push_back(new std::vector<bool>(largeur, false));
feraudyh
Messages postés
70
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
3 mars 2023
6
Modifié par feraudyh le 2/07/2014 à 20:27
Modifié par feraudyh le 2/07/2014 à 20:27
Il semble maintenant que le crash lors de l'execution n'a eu rien à voir avec le programme même. Mais jai bien eu une ligne dans un fichier .h où une exception de violation d'acces aurait eu lieu.
Je suis sorti de QtCreator et je suis retourné et l'exception n'a plus eu lieu. J'ai l'impression que Qt 5.3.1 est assez buggé!!
Je suis sorti de QtCreator et je suis retourné et l'exception n'a plus eu lieu. J'ai l'impression que Qt 5.3.1 est assez buggé!!
feraudyh
Messages postés
70
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
3 mars 2023
6
2 juil. 2014 à 21:43
2 juil. 2014 à 21:43
Merci pour cette réponse généreuse.
Le tableau de bool est il économe en place?
Le tableau de bool est il économe en place?
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
2 juil. 2014 à 22:13
2 juil. 2014 à 22:13
Un vrai tableau de bool non, car un bool occupe un octet en mémoire. Le standard C++11 précise par contre une spécialisation pour les
vector<bool>(§23.3.7 de l'ISO/IEC 14882:2011) où les booléens sont stockés dans un bitfield, c-à-d que 8 bools dans le vecteur ne prendront qu'un octet de mémoire (car 1octet=8bits), divisant effectivement l'espace requis par 8.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
feraudyh
Messages postés
70
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
3 mars 2023
6
2 juil. 2014 à 22:37
2 juil. 2014 à 22:37
Oui, merci, je vais implementer tout cela comme un vector<bool> et gerer mes propres indexes avec la formule
bool getBit(int X,int Y)
{
return monvecteurbool[width*Y + X];
}
bool getBit(int X,int Y)
{
return monvecteurbool[width*Y + X];
}