C++ à l'aide de Liste STL, comment copier une liste existante dans une nouvelle liste
Droit maintenant, je suis en train de travailler avec un constructeur de copie pour la prise d'une liste appelée val de type char, et j'ai besoin de prendre tous les éléments d'une chaîne de v qui est passée dans le constructeur de copie et de les mettre dans le val de liste.
Public:
LongInt(const string v);
Private:
list<char> val;
Donc ici, dans la section publique de la LongInt classe j'ai un constructeur de copie qui prend le val de liste et copie le v de la chaîne. Quelqu'un peut-il m'aider à comprendre comment faire cela? Merci à l'avance!
Vous voudrez peut-être penser que le choix d'une liste de caractères est vraiment le meilleur conteneur à utiliser. Les fragments de la mémoire assez fortement, ainsi que d'avoir un assez gros frais généraux.
LongInt(const string v);
n'est pas un constructeur de copie.OriginalL'auteur Ctak | 2011-04-04
Vous devez vous connecter pour publier un commentaire.
Dans votre
LongInt
constructeur suffit d'utiliser laiterator, iterator
list
constructeur:LongInt(const string v) : val(v.begin(), v.end()) { }
Cela étant dit, avez-vous envisagé d'utiliser effectivement
string
ou éventuellementdeque<char>
de manipuler votre séquence plutôt quelist
? Selon vos besoins, ces solutions de rechange pourraient être mieux.La signature doit être changé à
const string & v
, pour éviter une inutile copie. Aussi, il semble étrange de choisir unedeque
ici. Unvector
a beaucoup moins de frais généraux.OriginalL'auteur Mark B
Vous aurez à effectuer une itération sur la chaîne et d'en extraire les données caractère par caractère. À l'aide de la
std::copy
algorithme devrait fonctionner:OriginalL'auteur Timo Geusch
OriginalL'auteur f4.
Tout d'abord, utilisez
std::string
si c'est une chaîne que vous voulez enregistrer. C'est une boite comme les autres. Si vous ne pouvez pas ou ne souhaitez pas stocker une chaîne de caractères, utilisezstd::vector
. Mais qui se résument à une moins-fonctionnellestd::string
de toute façon, si juste utiliserstd::string
.Pour la copie:
Mais il suffit d'utiliser un
std::string
si c'est une liste dechar
s vous êtes le stockage.OriginalL'auteur rubenvb