guilhemmartincpp
Messages postés25Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention 9 janvier 2008 15 juil. 2007 à 10:23
""" Un char n'est pas codé en 1 bit mais en 1 byte (octet en anglais), soit 8 bits pour des valeurs comprises entre -128 et 127. """
Merci Sanke pour la correction, c'est tout à fait judicieux. Il s'agit d'un lapsus de ma part.
Content que ça te soit utile.
cs_Sanke
Messages postés3Date d'inscriptionvendredi 26 septembre 2003StatutMembreDernière intervention10 juillet 2007 10 juil. 2007 à 14:45
Juste une petite précision concernant la partie :
SPECIALISATION DU VECTEUR DANS LE CAS DE BOOLEENS
# // Un booléen du vecteur va être stocké sur un bit au lieu d'être stocké sur un octet
# // Pour vérifier cela, nous allons comparer la capacité d'un vecteur de booléens
# // et celle d'un vecteur de char (un char tenant sur un bit)
Un char n'est pas codé en 1 bit mais en 1 byte (octet en anglais), soit 8 bits pour des valeurs comprises entre -128 et 127.
Sinon code très interressant pour retrouver les prototypes des fonctions !
Bonne continuation
spidermario
Messages postés121Date d'inscriptionmercredi 26 octobre 2005StatutMembreDernière intervention14 mars 20091 26 mai 2007 à 12:41
Il est inutile d'écrire &xyz[0] car cela revient à écrire &(*xyz) et par conséquent xyz.
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 17 mai 2007 à 19:39
J'suis pas un grand fan de boost pour le moment. Bon courage.
cs_Gandi
Messages postés3Date d'inscriptionmardi 8 novembre 2005StatutMembreDernière intervention17 mai 2007 17 mai 2007 à 16:09
oups désolé , j'étais complétement dans mon truc que j'ai oublié de dire c'était quoi (en plus j'était sur de que tu parlait de boost, encore désolé , ça m'apprendra à jongler entre plusieurs forums pour avoir la réponse )
boost::numeric::ublas::matrix
voici les liens:
Documention ublas :
http://www.boost.org/libs/numeric/ublas/doc/index.htm
quand je disais des mechancetées c'était pour ublas , pas pour la std.
Merci pour ton aide . ;)
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 17 mai 2007 à 15:58
Malheureusement, je ne peux t'aider, l'objet matrix ne fait pas partie du C++, et je ne sais pas d'où cela vient.
Ce que j'ai écris étais valable pour std::vector
cs_Gandi
Messages postés3Date d'inscriptionmardi 8 novembre 2005StatutMembreDernière intervention17 mai 2007 17 mai 2007 à 14:03
Merci Hylvenir , désolé pour ce matin , à 3h du mat j'ai été un peu trops présomptueu de vouloir comprendre ce genre de chose . Merci pour le lien du livre je comptais justement m'en prendre un :p.
J'ai trouvé la solution
m_Matrice = matrix<float,row_major,std::vector<float> >(4,4);
et pour y accéder j'ai fait comme ça
&(m_Matrice.data())[0]
j'ai essayé &m_Matrice[0] ça marche pas il n'y a as d'oppérateur crochet.
SI ça dérenge pas, je vais faire pare du soucis qu'il me reste.
j'obtient une matrice nul comme si j'avais assigné une zero_matrix.
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 17 mai 2007 à 12:39
Bah faut pas être énervé comme ça Gandi.
Comment ferais-tu en C ? ...
Et bien c'est pareil.
Sous réserve de ta description de matrix<float>
(parce que là, ça fait plutôt un tableau de float de taille 4 initialisé à 4.0... sauf erreur de ma part)
la réponse est donc (comme en C)
glMultMatrixf( &m_Matrice[0] )
Une propriété que doit avoir le std::vector est d'être un espace continu de donnée.
Sinon, oui la STL (ou SL) est outil qu'il faut appréhender par étape. C'est comme dire que le piano c'est pour les élites présomptueuses parce que j'ai pas réussi à faire "Sonate au Clair de Lune" de beethoveen en 3 jours...
cs_Gandi
Messages postés3Date d'inscriptionmardi 8 novembre 2005StatutMembreDernière intervention17 mai 2007 17 mai 2007 à 02:45
Question: Comment fait on pour récupérer en une passe le tableau de données (un tableau une dimension [16] ), pour opengl dans mon cas
m_Matrice = matrix<float>(4,4);
glMultMatrixf( m_Matrice.data.????);
si c'est pas le cas ubla c'est fait que pour de l'affichage texte --> aucun intéret pour le temps réel--> masturbation intellectuelle d'élitiste présonpteux (oui je suis assé énervé par la complexité et la lourdeure de cette lib..désolé).
Merci d'avance ;)
guilhemmartincpp
Messages postés25Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention 9 janvier 2008 2 mars 2005 à 08:03
Mise à jour de la source :
J'ai rajouté, à la fin du main, quelques lignes sur la spécialisation de vector suivant la remarque de steve_clamage
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 24 févr. 2005 à 21:15
ils utilisent le nom (l'alias) bit_vector mais il est bien précisé que ce nom est déprécié.
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 24 févr. 2005 à 21:14
L'implementation de vector est spéciale, le but est de permettre de stocker une grande quantité de valeurs logiques sur un minimun de place en mémoire, chaque bool est stoqué sur 1 bit au lieu d'un multiplet (byte)
Donc gain de place mais moins performant pour les opérations courrantes sur un vector. Si tu veux utiliser une séquence de booléens pour appliquer des masques (ou autre traitements de masse) il vaut mieux utiliser std::valarray qui justement n'est pas implementé avec un vector (ce n'est pas un adaptateur de séquence) pour ces raisons.
guilhemmartincpp
Messages postés25Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention 9 janvier 2008 24 févr. 2005 à 20:45
@Hylvenir : J'ai mis à jour de la source suivant tes remarques.
@steve_clamage : pourrais-tu développer un peu plus stp ? Merci.
@Tous : nouvelles remarques bienvenues
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 22 févr. 2005 à 18:34
ne pas oublier aussi de parler de la specialisation partielle au niveau du type de std::vector, trés important car dans certains cas il sera plus judicieux de choisir std::valarray
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 22 févr. 2005 à 09:47
guilhemmartincpp
Messages postés25Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention 9 janvier 2008 22 févr. 2005 à 09:17
Ok, merci pour la précision.
Trouve-t-on le standard en ligne quelque part sur le web ?
Le vocabulaire que j'emploie est en fait celui de la MSDN, où [] est rangé comme opérateur, par "opposition" à par exemple at, rangé dans les fonctions membres.
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 22 févr. 2005 à 08:14
Salut (de bon matin),
ok.
Mais opérateur c'est plutôt une liée à la notation. (operator)
J'appelle ça aussi un opérateur mais ça n'empêche que c'est une fonction membre ( exemple operator[], operator += ) ou non membre ( operator +, operator *, ... ).
guilhemmartincpp
Messages postés25Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention 9 janvier 2008 22 févr. 2005 à 07:24
Salut,
moi à la base, [], j'appelle ça un opérateur. D'où la nuance...
Guilhem.
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 21 févr. 2005 à 22:35
ah oui, (dommage je peux pas éditer mon précédent message)....
essaye pour voir :
(MonVecteur).operator[]( 0 );
ou relis la paragraphe 13.5.5 du standard ;)
bonne lecture :)
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 21 févr. 2005 à 22:13
c'est la première fois que je lis que l'opérateur [] du vector n'est pas une fonction membre.
pourtant dans le standard il est juste au dessus de at() ?
guilhemmartincpp
Messages postés25Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention 9 janvier 2008 21 févr. 2005 à 20:59
Salut,
merci pour tes remarques judicieuses.
Pour l'opérateur [], c'est normal car je parle juste des fonctions membres (comme indiqué dans le titre). Tu fais bien de le préciser ceci dit
En ce qui concerne la compilation VC6, tu as raison. En fait j'avais travaillé sous dotnet en essayant d'anticiper ce qui ne compilerait pas sous VC6. Après essai sous VC6 je me suis aperçu qu'il y avait encore plus de choses qui ne compilaient pas. Je corrigerai le tir à la prochaine maj en enlevant carrément le #define.
get_allocator, c'est noté, pour la prochaine maj, il y aura un exemple concret.
Pour afficher(), c'est tout à fait vrai, mais mon but ici était de présenter surtout les fonctions, donc je me suis permis d'utiliser une variable globale. Pour la prochaine maj donc, une amélioration.
Merci pour tes remarques constructives,
@plus
Guilhem.
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 21 févr. 2005 à 20:44
Salut,
pas mal.
Mais c'est rigolo tu ne parles même pas de l'opérateur [] qui est quand même l'élément pour faire croire à un tableau C classique.
Et puis tu mets 'ne compile pas sous VC6' dans dans le code il y a #ifndef VC6. Pourquoi faire ? (à part désactiver certains bout de code. On le sait que VC6 c'est pas vraiment un compilo C++).
Ensuite tu parles de get_allocator, qui à mon avis sert très très peu souvent (en tout cas tu devrais mettre un exemple intéressant d'utilisation).
Enfin pour afficher(), t'aurais pu passer le std::vector à afficher en const &. ça aurait éviter la variable globale.
A+
15 juil. 2007 à 10:23
Merci Sanke pour la correction, c'est tout à fait judicieux. Il s'agit d'un lapsus de ma part.
Content que ça te soit utile.
10 juil. 2007 à 14:45
SPECIALISATION DU VECTEUR DANS LE CAS DE BOOLEENS
# // Un booléen du vecteur va être stocké sur un bit au lieu d'être stocké sur un octet
# // Pour vérifier cela, nous allons comparer la capacité d'un vecteur de booléens
# // et celle d'un vecteur de char (un char tenant sur un bit)
Un char n'est pas codé en 1 bit mais en 1 byte (octet en anglais), soit 8 bits pour des valeurs comprises entre -128 et 127.
Sinon code très interressant pour retrouver les prototypes des fonctions !
Bonne continuation
26 mai 2007 à 12:41
17 mai 2007 à 19:39
17 mai 2007 à 16:09
boost::numeric::ublas::matrix
voici les liens:
Documention ublas :
http://www.boost.org/libs/numeric/ublas/doc/index.htm
Documention du type matrix:
http://www.boost.org/libs/numeric/ublas/doc/matrix.htm#matrix
Documentation du type du data des matrices par défaut:
http://www.boost.org/libs/numeric/ublas/doc/unbounded_array.htm
http://www.boost.org/libs/numeric/ublas/doc/storage_concept.htm
d'ailleur pas la peine de faire des std::vector ça marche aussi.
quand je disais des mechancetées c'était pour ublas , pas pour la std.
Merci pour ton aide . ;)
17 mai 2007 à 15:58
Ce que j'ai écris étais valable pour std::vector
17 mai 2007 à 14:03
J'ai trouvé la solution
m_Matrice = matrix<float,row_major,std::vector<float> >(4,4);
et pour y accéder j'ai fait comme ça
&(m_Matrice.data())[0]
j'ai essayé &m_Matrice[0] ça marche pas il n'y a as d'oppérateur crochet.
SI ça dérenge pas, je vais faire pare du soucis qu'il me reste.
m_Matrice = matrix<float,row_major,std::vector<float> >(4,4);
m_Identite = identity_matrix<float>(4);
j'obtient une matrice nul comme si j'avais assigné une zero_matrix.
17 mai 2007 à 12:39
Comment ferais-tu en C ? ...
Et bien c'est pareil.
Sous réserve de ta description de matrix<float>
(parce que là, ça fait plutôt un tableau de float de taille 4 initialisé à 4.0... sauf erreur de ma part)
la réponse est donc (comme en C)
glMultMatrixf( &m_Matrice[0] )
Une propriété que doit avoir le std::vector est d'être un espace continu de donnée.
Sinon, oui la STL (ou SL) est outil qu'il faut appréhender par étape. C'est comme dire que le piano c'est pour les élites présomptueuses parce que j'ai pas réussi à faire "Sonate au Clair de Lune" de beethoveen en 3 jours...
Prends un bon livre (http://www.josuttis.com/libbook/)
et on verra après.
17 mai 2007 à 02:45
m_Matrice = matrix<float>(4,4);
glMultMatrixf( m_Matrice.data.????);
si c'est pas le cas ubla c'est fait que pour de l'affichage texte --> aucun intéret pour le temps réel--> masturbation intellectuelle d'élitiste présonpteux (oui je suis assé énervé par la complexité et la lourdeure de cette lib..désolé).
Merci d'avance ;)
2 mars 2005 à 08:03
J'ai rajouté, à la fin du main, quelques lignes sur la spécialisation de vector suivant la remarque de steve_clamage
24 févr. 2005 à 21:15
http://www.sgi.com/tech/stl/bit_vector.html
ils utilisent le nom (l'alias) bit_vector mais il est bien précisé que ce nom est déprécié.
24 févr. 2005 à 21:14
Donc gain de place mais moins performant pour les opérations courrantes sur un vector. Si tu veux utiliser une séquence de booléens pour appliquer des masques (ou autre traitements de masse) il vaut mieux utiliser std::valarray qui justement n'est pas implementé avec un vector (ce n'est pas un adaptateur de séquence) pour ces raisons.
24 févr. 2005 à 20:45
@steve_clamage : pourrais-tu développer un peu plus stp ? Merci.
@Tous : nouvelles remarques bienvenues
22 févr. 2005 à 18:34
22 févr. 2005 à 09:47
http://www.csci.csusb.edu/dick/c++std/
tu devrais trouver des choses.
22 févr. 2005 à 09:17
Trouve-t-on le standard en ligne quelque part sur le web ?
Le vocabulaire que j'emploie est en fait celui de la MSDN, où [] est rangé comme opérateur, par "opposition" à par exemple at, rangé dans les fonctions membres.
22 févr. 2005 à 08:14
ok.
Mais opérateur c'est plutôt une liée à la notation. (operator)
J'appelle ça aussi un opérateur mais ça n'empêche que c'est une fonction membre ( exemple operator[], operator += ) ou non membre ( operator +, operator *, ... ).
22 févr. 2005 à 07:24
moi à la base, [], j'appelle ça un opérateur. D'où la nuance...
Guilhem.
21 févr. 2005 à 22:35
essaye pour voir :
(MonVecteur).operator[]( 0 );
ou relis la paragraphe 13.5.5 du standard ;)
bonne lecture :)
21 févr. 2005 à 22:13
pourtant dans le standard il est juste au dessus de at() ?
21 févr. 2005 à 20:59
merci pour tes remarques judicieuses.
Pour l'opérateur [], c'est normal car je parle juste des fonctions membres (comme indiqué dans le titre). Tu fais bien de le préciser ceci dit
En ce qui concerne la compilation VC6, tu as raison. En fait j'avais travaillé sous dotnet en essayant d'anticiper ce qui ne compilerait pas sous VC6. Après essai sous VC6 je me suis aperçu qu'il y avait encore plus de choses qui ne compilaient pas. Je corrigerai le tir à la prochaine maj en enlevant carrément le #define.
get_allocator, c'est noté, pour la prochaine maj, il y aura un exemple concret.
Pour afficher(), c'est tout à fait vrai, mais mon but ici était de présenter surtout les fonctions, donc je me suis permis d'utiliser une variable globale. Pour la prochaine maj donc, une amélioration.
Merci pour tes remarques constructives,
@plus
Guilhem.
21 févr. 2005 à 20:44
pas mal.
Mais c'est rigolo tu ne parles même pas de l'opérateur [] qui est quand même l'élément pour faire croire à un tableau C classique.
Et puis tu mets 'ne compile pas sous VC6' dans dans le code il y a #ifndef VC6. Pourquoi faire ? (à part désactiver certains bout de code. On le sait que VC6 c'est pas vraiment un compilo C++).
Ensuite tu parles de get_allocator, qui à mon avis sert très très peu souvent (en tout cas tu devrais mettre un exemple intéressant d'utilisation).
Enfin pour afficher(), t'aurais pu passer le std::vector à afficher en const &. ça aurait éviter la variable globale.
A+