La conversion d'un C-string pour un std::vector<byte> d'une manière efficace
Je veux convertir un C-style de la chaîne en octets-vecteur.
Une solution serait de convertir chaque caractère manuellement et en le poussant sur le vecteur. Cependant, je ne suis pas satisfait de cette solution et que vous voulez trouver une façon plus élégante.
Un de mes tentatives a été la suivante:
std::vector<byte> myVector;
&myVector[0] = (byte)"MyString";
qui bugs et me met un
erreur C2106: '=': l'opérande gauche doit être l-valeur
Quelle est la bonne façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Le plus simple serait quelque chose comme:
Bien sûr, de ne pas calculer la longueur si vous le connaissez.
La plus commune de la solution est d'utiliser le
std::string
classe:Conteneurs STL comme
vector
toujours prendre possession, c'est à dire qu'ils gèrent leur propre mémoire. Vous ne pouvez pas modifier la mémoire gérée en interne par un conteneur STL. Pour cette raison, votre tentative (et de toute autre tentative est vouée à l'échec.La seule solution valable est de copier la mémoire ou d'écrire une nouvelle STL-conteneur de type qui ne prend pas la propriété de la mémoire, il accède.
vector::resize()
ouvector::reserve()
🙂La plus évidente question serait pourquoi vous ne vous contentez pas utiliser std::string:
mais si vous pensez vraiment que vous avez besoin d'un vecteur:
Vous pourriez aussi envisager d'utiliser std::tr1::array:
C++ 0x ont également
std::array
.Quelque chose le long de ces lignes devrait fonctionner
Aussi, c'est toujours d'aller simplement itérer sur la chaîne c et insérer les valeurs dans le vecteur. Comme Konrad dit, c'est juste la façon dont vous devez le faire depuis des vecteurs de gérer leur propre mémoire.