J'essaye d'utiliser std::vector
comme char
tableau.
Ma fonction prend un pointeur vide:
void process_data(const void *data);
Avant, je viens d'utiliser ce code:
char something[] = "my data here";
process_data(something);
Ce qui a fonctionné comme prévu.
Mais maintenant, j'ai besoin de la dynamicité de std::vector
, alors j'ai essayé ce code à la place:
vector<char> something;
*cut*
process_data(something);
La question est, comment puis-je passer le vecteur char à ma fonction pour pouvoir accéder aux données brutes vectorielles (quel que soit le format - flottants, etc.)?
J'ai essayé ceci:
process_data(&something);
Et ça:
process_data(&something.begin());
Mais il est revenu un pointeur vers des données charabia, et celui - ci a donné avertissement: warning C4238: nonstandard extension used : class rvalue used as lvalue
.
vector<bool>
qui est l'exception à cette réponse (et n'a pas de stockage de mémoire contigu debool
s).std::vector<bool>
car ellesstd::vector<bool>
nécessitent l'utilisation d'un objet proxy et ce proxy ne peut pas être implicitement converti enbool*
. Pour contourner ce problème, si vous avez besoin d'une séquence debool
, il est préférable d'utiliser simplement un fichierstd::vector<char>
. @Motti.data()
- je vais juste faire comme si je n'avais pas vu ça moche&*iterator
: Pdata()
live? Si le vecteur n'est jamais redimensionné ni plus grand ni plus petit (viapush_back()
ou d'autres fonctions, y comprisreserve
), est-il garanti que le pointeur vivra aussi longtemps que le vecteur vit, pointant vers le bon endroit?something.data()
renverra un pointeur vers l'espace de données du vecteur.la source
error C2039: 'data' : is not a member of 'std::vector<_Ty>'
vector::data()
nouveau sur C ++ 11Prenez plutôt un pointeur vers le premier élément:
la source