8
votes

Comment puis-je cloner vecteur?

J'utilise le vecteur comme tampon d'entrée ... xxx

Après avoir lu toutes les données du tampon d'entrée, il mettra la donnée à l'intérieur du vecteur dans la piscine de fil.

Alors j'essayais de faire cloner le vecteur. Je pense que je ne peux pas simplement passer le pointeur sur le vecteur à cause des nouveaux paquets entrant et il écrase les données à l'intérieur du vecteur.

Cependant, je n'ai pas pu trouver un moyen de cloner le vecteur. S'il vous plaît me fournir une bonne façon de gérer cela. De plus, je serai très apprécié si vous souhaitez souligner tous les problèmes à l'aide de vecteurs comme tampon d'entrée ou didacticiels liés à cette ...


0 commentaires

3 Réponses :


2
votes

Au début, vous devrez peut-être appeler Recv avec & m_vbuffer [0] code>. À propos du clonage du vecteur, utilisez copie ().

#include <algorithm>
...

vector<char> m_vcopy;
m_vcopy.reserve(m_vbuffer.size());
copy(m_vbuffer.begin(), m_vbuffer.end(), m_vcopy.begin());


3 commentaires

Vous trouverez également vecteur :: swap () pour être plus efficace car il évite complètement la copie.


@NEMO: Lorsque tout le point est de copier (aka clone), évitant que la copie devrait être le moindre de vos soucis. Vous trouverez également la déclaration vide ; pour être plus efficace, mais cela ne fera pas ce que vous voulez.


Mon point est que l'utilisateur demande la mauvaise question. La dernière chose que vous voulez faire est de faire une autre copie de chaque octet arrivant du réseau. Aussi, je suppose qu'il appelle recv dans une boucle (sinon son code est faux), c'est pourquoi il utilise & m_buffer [totalRecv] au lieu de m_buffer [0] . C'est le Taille_of_buffer argument qui est faux; il devrait être m_buffer.size () - TOTALRECV



32
votes

Vous pouvez facilement copier un vecteur à l'aide de son constructeur de copie:

vector<T> the_copy(the_original); // or
vector<T> the_copy = the_original;


1 commentaires

+1, mais peut-être mieux ne pas appeler la copie au cas où il fasse #include et à l'aide de namepace std .



0
votes

Comme Nemo souligne, vous voudrez peut-être déterminer si vous avez vraiment besoin d'une copie du vecteur. Pouvez-vous vous échapper avec le transfert du contenu à l'aide de std :: échange ou std :: Déplacer (si vous utilisez c ++ 0x)?


0 commentaires