2010-09-24 8 views
20

J'ai une bibliothèque qui attend un tableau et le remplit. Je voudrais utiliser un vecteur std :: au lieu d'utiliser un tableau. Ainsi, au lieu deConvertir std :: vector en tableau

int array[256]; 
object->getArray(array); 

Je voudrais faire:

std::vector<int> array; 
object->getArray(array); 

Mais je ne peux pas trouver un moyen de le faire. Est-il possible d'utiliser std :: vector pour cela?

Merci d'avoir lu!


EDIT: Je veux placer une mise à jour à ce problème: je jouais avec 11 C++ et trouvé une meilleure approche. La nouvelle solution consiste à utiliser la fonction std :: vector.data() pour obtenir le pointeur sur le premier élément. On peut donc faire ce qui suit:

std::vector<int> theVec; 
object->getArray(theVec.data()); //theVec.data() will pass the pointer to the first element 

Si nous voulons utiliser un vecteur avec une quantité fixe d'éléments nous mieux utiliser le nouveau type de données std :: tableau au lieu (BTW, pour cette raison, le nom de la variable « tableau ", qui a été utilisé dans la question ci-dessus ne devrait plus être utilisé !!).

std::array<int, 10> arr; //an array of 10 integer elements 
arr.assign(1); //set value '1' for every element 
object->getArray(arr.data()); 

Les deux variantes de code fonctionne correctement dans Visual C++ 2010. Rappelez-vous: c'est C++ 11 Code de sorte que vous aurez besoin d'un compilateur qui prend en charge les fonctionnalités!

La réponse ci-dessous est toujours valable si vous n'utilisez pas C++ 11!

+0

Possible copie de [Comment convertir un vecteur en tableau C++] (http://stackoverflow.com/questions/2923272/how-to-convert-vector-to-array-c) – Trilarion

Répondre

26

Oui:

std::vector<int> array(256); // resize the buffer to 256 ints 
object->getArray(&array[0]); // pass address of that buffer 

éléments dans un vector sont garantis contigus, comme un tableau.

+0

Works :) Merci! – SideEffect

+5

Mais attention aux tableaux de taille nulle. – ybungalobill

+0

Que se passe-t-il si le vecteur est déplacé? – alxx

Questions connexes