Vector et pointeur

Vector et pointeur - C++ - Programmation

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

Reply

Marsh Posté le 01-03-2010 à 12:38:45   

Reply

Marsh Posté le 01-03-2010 à 13:50:39    

La reponse est Non.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

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

Reply

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


---------------
last.fm
Reply

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 :
  1. const char arr[] = "1234567890";
  2. vector<char> vec(sizeof arr); 
  3. memcpy(&vec[0], arr, sizeof arr);  // copie des chars d'arr dans vec


 
 
Maintenant je peux me tromper, surtout qu'Un Programmeur est plutôt balèze en C++ :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

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.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

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

Reply

Marsh Posté le 01-03-2010 à 16:02:30    

passe tes vector directement à ta fonction ??

Reply

Marsh Posté le 01-03-2010 à 21:52:12    

Sa a pas l air d' être le but


Message édité par shipjin le 01-03-2010 à 21:53:16
Reply

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.

Reply

Marsh Posté le 02-03-2010 à 08:34:34   

Reply

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> ).
 
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.


 
Oki merci  :jap:


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

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> ).
 
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.


 
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)

Reply

Marsh Posté le 02-03-2010 à 12:38:16    

C'est bien a cela que je faisais allusion.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 02-03-2010 à 12:41:55    

Merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed