Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1189 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?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR