J'utilise le vecteur comme tampon d'entrée ... 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. P> 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. P> 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 ... P> P>
3 Réponses :
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());
Vous trouverez également vecteur :: swap () code> 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 ; code> 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 code> dans une boucle (sinon son code est faux), c'est pourquoi il utilise & m_buffer [totalRecv] code> au lieu de m_buffer [0] code>. C'est le Taille_of_buffer code> argument qui est faux; il devrait être m_buffer.size () - TOTALRECV CODE>
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, mais peut-être mieux ne pas appeler la copie au cas où il fasse #include à l'aide de namepace std code>.
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 code> ou std :: Déplacer code> (si vous utilisez c ++ 0x)? P>