Vector et pointeur - C++ - Programmation
Marsh Posté le 01-03-2010 à 13:50:39
La reponse est Non.
Marsh Posté le 01-03-2010 à 14:15:40
au moins c'est clair.
Donc soit je refais la fonction avec les vectors soit je refais le prog soit je trasforme mes vects en tableau et je perds tout l interets des vectors ?
Merci en tout cas
Marsh Posté le 01-03-2010 à 14:39:30
techniquement, tu pourrais toujours bricoler un tableau d'indirections vers les multiples vecteurs contenus dans le vecteur vX. Ce tableau d'indirection contiendrait donc vX.size() pointeurs vers les premières cases des tableaux. Mais c'est vraiment du bricolage
Marsh Posté le 01-03-2010 à 14:41:34
Un Programmeur a écrit : La reponse est Non. |
Normalement on a la garantie qu'un vector stocke ses éléments de façon continue.
Donc j'aurai tendance à dire que si une méthode attend un tableau (un pointeur sur premier élément), alors on peut lui filer l'adresse du premier élément du vector
du genre :
Code :
|
Maintenant je peux me tromper, surtout qu'Un Programmeur est plutôt balèze en C++
Marsh Posté le 01-03-2010 à 14:48:45
Xavier, tu as raison pour un vector<> (la garantie n'est pas presente en C++98 mais a ete ajoutee dans un DR, peut-etre a temps pour C++03, peut-etre pas; j'ai le souvenir que c'est a temps pour vector ou string mais pas pour l'autre; on exclu aussi l'anomalie qu'est vector<bool> ).
Le probleme ici, c'est qu'il a un double** et passer sans reorganisation d'un vector<vector> a un double** ne donne pas le resultat attendu.
Marsh Posté le 01-03-2010 à 14:52:58
oui le problme était sur le double** merci de votre réponse, je redefinis mes fonction et et je me trimballerais avec les tailles
thanks
Marsh Posté le 01-03-2010 à 21:52:12
Sa a pas l air d' être le but
Marsh Posté le 02-03-2010 à 08:34:34
ça n'a pas l'air certes, mais c'est la façon propre de faire.
La seule justification, c'est que f serait une ofnction legacy dont il n'a pas le source.
En C++,on passe des tableaux par références de vector. Point. Sinon c'ets du C.
Marsh Posté le 02-03-2010 à 09:27:10
Un Programmeur a écrit : Xavier, tu as raison pour un vector<> (la garantie n'est pas presente en C++98 mais a ete ajoutee dans un DR, peut-etre a temps pour C++03, peut-etre pas; j'ai le souvenir que c'est a temps pour vector ou string mais pas pour l'autre; on exclu aussi l'anomalie qu'est vector<bool> ). |
Oki merci
Marsh Posté le 02-03-2010 à 12:05:48
Un Programmeur a écrit : Xavier, tu as raison pour un vector<> (la garantie n'est pas presente en C++98 mais a ete ajoutee dans un DR, peut-etre a temps pour C++03, peut-etre pas; j'ai le souvenir que c'est a temps pour vector ou string mais pas pour l'autre; on exclu aussi l'anomalie qu'est vector<bool> ). |
Juste une petite parenthèse proche du sujet :
Quand tu dis "on exclu aussi l'anomalie qu'est vector<bool>", l'anomalie est bien qu'ils sont optimisé en utilisant des bits sur lesquelles on ne peut prendre de référence ?
(Je profite du sujet pour vérifier que l'erreur "invalid cast of an rvalue expression of type ‘std::_Bit_reference’ to type ‘bool&’" est bien due à cela)
Marsh Posté le 02-03-2010 à 12:38:16
C'est bien a cela que je faisais allusion.
Marsh Posté le 01-03-2010 à 12:38:45
Hello a tous
Voila mon petit soucis j'ai une fonction qui utilise des pointeur
fonction( double* Y, double** X, double* b, int lig, int col)
Je veux l'utiliser dans mon programme qui lui utilise la classe vector.
vector<double> vb(i);
vector<double> vY(i);
vector< vector< double > > vX(i,vector<double> ());
Et la question que vous voyez deja venir :
comment ou est il possible d'utiliser ma fonction avec mes vecteur sans tous refaire ?
Merci
j'ai pensé a double *Y= & vY(0) mais je bloque pour le double **X