2010-07-12 20 views
1

Simple question, comment on crée une fonction qui prend un unsigned char std::vector et crache un unsigned char[] avec un length. Merci!Char non signé char std :: vectorisé à unsigned char []?

Ah, eh bien, il semble que mon problème était ma connaissance de std :: vector. J'ai toujours cru que std :: vector ne tenait pas ses valeurs de manière linéaire. Cela résout beaucoup de mes problèmes. Merci!

+4

Pourquoi ne pas simplement utiliser '& v [0]' pour obtenir un pointeur sur le sous-jacent 'char []' et 'v. size() 'pour obtenir la longueur? Avez-vous besoin de copier les données dans un autre tableau? Quel est exactement votre objectif final? –

+0

Vous pouvez avoir une méthode 'data()' disponible. Il fait la même chose que & v [0], mais malheureusement ce n'est pas standard: http://msdn.microsoft.com/en-us/library/dd647618.aspx – Gunslinger47

Répondre

5

Utilisez simplement: &v.front().

Si vous avez besoin d'une copie, utilisez std::copy.

+1

Ou la "STL-sequence-container-requirement-version" '& v [0]'. –

+0

Ya, je pense qu'ils sont équivalents. J'ai toujours préféré la variante v.front(), mais j'ai appris que & v [0] est plus populaire. –

+0

La seule raison pour laquelle je pense que c'est plus populaire est que c'est la syntaxe utilisée dans la norme. –

2

Malheureusement, ce n'est pas une doublure, mais il est pas trop mal:

std::vector<unsigned char> v(10); 
unsigned char* a = new unsigned char[v.size()]; 
std::copy(v.begin(), v.end(), a); 
delete [] a; 
+1

Quel est le but d'en tirer la sécurité? N'utilisez jamais 'new' lorsque vous devez le supprimer explicitement. Dans ce cas, vous utiliseriez un 'vecteur' et ... maintenant vous venez de le déplacer d'un vecteur à l'autre. – GManNickG

+0

@GMan - Dunno, l'OP a demandé, peut-être qu'il a besoin de passer la propriété à une API héritée (il s'avère, non ... il avait juste besoin de 'v.front()') – Stephen