Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4728 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++] Conversion vector<T> en T*

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] Conversion vector<T> en T*

n°871890
xterminhat​e
Si vis pacem, para bellum.
Posté le 12-10-2004 à 21:33:48  profilanswer
 

Bonsoir,
 
   A l'image de string::c_str(), existe t il une methode pour realiser cette conversion. Sinon quelle serait la méthode la plus économique.
 
Merci.


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 12-10-2004 à 21:33:48  profilanswer
 

n°871893
masklinn
í dag viðrar vel til loftárása
Posté le 12-10-2004 à 21:37:34  profilanswer
 

serait-il possible, pour commencer, de savoir pourquoi tu veux faire ca?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°871894
xterminhat​e
Si vis pacem, para bellum.
Posté le 12-10-2004 à 21:38:53  profilanswer
 

Je developpe un wrapper C++ pour encapsuler une lib ecrite  C. Les fonctions C attendent un T* en argument, alors que je travaille avec des vector<T>.


---------------
Cordialement, Xterm-in'Hate...
n°871943
Joel F
Real men use unique_ptr
Posté le 12-10-2004 à 22:40:20  profilanswer
 

vector::begin ....

n°871963
Taz
bisounours-codeur
Posté le 12-10-2004 à 23:01:12  profilanswer
 

&v[0] également, c'est imposé dans la spécification de std::vector<T>

n°872003
Joel F
Real men use unique_ptr
Posté le 12-10-2004 à 23:22:12  profilanswer
 

j'ai toujours trouvé ca moche &v[0] :o

n°872005
Kristoph
Posté le 12-10-2004 à 23:23:41  profilanswer
 

Joel F a écrit :

j'ai toujours trouvé ca moche &v[0] :o


C'est vector::begin qui est crade je dirais. Rien n'impose dans la norme que celui-ci soit un pointeur

n°872009
Joel F
Real men use unique_ptr
Posté le 12-10-2004 à 23:27:19  profilanswer
 

Kristoph a écrit :

C'est vector::begin qui est crade je dirais. Rien n'impose dans la norme que celui-ci soit un pointeur


 
o_O
 
pardon
 
vector<float> a.
float* pa = a.begin();
 
ca a plsu de guele que pa = &a[0];

n°872015
schnapsman​n
Zaford Beeblefect
Posté le 12-10-2004 à 23:28:35  profilanswer
 

Joel F a écrit :

o_O
float* pa = a.begin();


cay pas portable bordel!  :o


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°872017
Joel F
Real men use unique_ptr
Posté le 12-10-2004 à 23:28:59  profilanswer
 

schnapsmann a écrit :

cay pas portable bordel!  :o

 
 
 [:le kneu]  [:autobot]  [:alfone]

mood
Publicité
Posté le 12-10-2004 à 23:28:59  profilanswer
 

n°872044
Taz
bisounours-codeur
Posté le 12-10-2004 à 23:48:28  profilanswer
 

hum, de ce que je me souviens, l'implémentation des iterator est dépendantes du système. Ce qui est sur, c'est T == iterator::value_type. Donc faudrait faire T *first = &*begin(); ... faudrait faire une petite recherche la dessus.
 
les reference et const_reference sont des T et l-value-T

n°872095
Lam's
Profil: bas.
Posté le 13-10-2004 à 07:57:48  profilanswer
 

Farpaitement. D'ailleurs, la STL de base de GCC 3.X (valable au moins pour X=0 et X=1) est comme ça. vector::iterator n'est pas un pointeur, mais un objet (c'est l'une des rares implémentations à le faire d'ailleurs, ce qui justifie pas mal de questions dans sa FAQ).

n°872133
Taz
bisounours-codeur
Posté le 13-10-2004 à 09:15:39  profilanswer
 

&v.first() est sans doute plus lisible

n°872737
schnapsman​n
Zaford Beeblefect
Posté le 13-10-2004 à 21:44:14  profilanswer
 

Lam's a écrit :

Farpaitement. D'ailleurs, la STL de base de GCC 3.X (valable au moins pour X=0 et X=1) est comme ça. vector::iterator n'est pas un pointeur, mais un objet (c'est l'une des rares implémentations à le faire d'ailleurs, ce qui justifie pas mal de questions dans sa FAQ).


 
voila merci, JoelF --> DTC  :D


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°872756
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-10-2004 à 21:58:53  profilanswer
 

Donc je remplace

Code :
  1. T* pt = new T[ v.size() ];
  2. copy( v.begin(), v.end(), pt );


par

Code :
  1. T* pt = &v.first();


Cela reste portable, si je conclue bien.


---------------
Cordialement, Xterm-in'Hate...
n°872758
Taz
bisounours-codeur
Posté le 13-10-2004 à 22:01:25  profilanswer
 

oui (ou comme déjà dit &v[0] est également OK)

n°872760
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-10-2004 à 22:02:30  profilanswer
 

Ok, merci de votre aide.


---------------
Cordialement, Xterm-in'Hate...
n°872761
Taz
bisounours-codeur
Posté le 13-10-2004 à 22:04:36  profilanswer
 

par contre, si j'étais toi, je rajouterais un T * const p = machin; sinon tu va vite être tenter d'itérer ton vector directement avec p, tu perdrais alors tout le bénéfice des iterator

n°872769
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-10-2004 à 22:15:39  profilanswer
 

c'est plutot vector::front() au passage.


---------------
Cordialement, Xterm-in'Hate...
n°872770
Taz
bisounours-codeur
Posté le 13-10-2004 à 22:16:35  profilanswer
 

oui :D

n°872772
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-10-2004 à 22:16:41  profilanswer
 

La conversion passe bien mais je me fais couillonné par l'API écrite en C au final. Je suis obligé de const_caster au moment de l'appel de la fonction C.


---------------
Cordialement, Xterm-in'Hate...
n°872773
Taz
bisounours-codeur
Posté le 13-10-2004 à 22:17:18  profilanswer
 

heink ?

n°872775
Taz
bisounours-codeur
Posté le 13-10-2004 à 22:19:47  profilanswer
 

Code :
  1. void f(int *);
  2. void g(const int *);
  3. void h()
  4. {
  5.   std::vector<int> v;
  6.   f(&v[0]);
  7.   g(&v[0]);
  8. }

n°872776
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-10-2004 à 22:19:52  profilanswer
 

Code :
  1. void write_cpp( const vector< unsigned char >& p )
  2. {
  3. write_c( const_cast<unsigned char*>( &p.front() ), p.size() );
  4. }


Message édité par xterminhate le 13-10-2004 à 22:24:35

---------------
Cordialement, Xterm-in'Hate...
n°872777
Taz
bisounours-codeur
Posté le 13-10-2004 à 22:20:23  profilanswer
 

ben évidemment, si ton machin C est défaillant niveau constness ...

n°872779
Joel F
Real men use unique_ptr
Posté le 13-10-2004 à 22:21:47  profilanswer
 

schnapsmann a écrit :

voila merci, JoelF --> DTC  :D


 
ca fait mal  [:everything4free]

n°872780
xterminhat​e
Si vis pacem, para bellum.
Posté le 13-10-2004 à 22:22:07  profilanswer
 

Distribuer des lib pour un OS récent avec une API en C aussi pourri... je comprends pas.


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++] Conversion vector<T> en T*

 

Sujets relatifs
Problème avec la classe vectorconversion str en date ou datetime
Conversion site IE>Mozilla, PLZ help!conversion date millisecondes -> yyyy-mm-dd hh:ii:ss
conversion fichier jpeg vers ppmConversion de date avec MSQUERY
conversion d'object de tableaux en int[VBA-VB]Conversion VBA -> VB
SQL fonction conversion vers date[BCB6] problème de conversion de couleur hexa
Plus de sujets relatifs à : [c++] Conversion vector<T> en T*


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)