Comment puis-je copier une partie d'un tableau à un autre tableau en C++?
C'est la même question posée en C#, mais j'ai besoin de C++
Comment puis-je copier une partie d'un tableau à un autre tableau?
Envisager je vais avoir
int[] a = {1,2,3,4,5};
Maintenant, si je donne l'index de début et de fin de l'index de la matrice a, il devrait être copiés sur un autre tableau.
Comme si je donne index de début 1 et la fin de l'index 3, les éléments 2, 3, 4 doivent être copiés dans le nouveau tableau.
En C#, il est fait comme suit
int[] b = new int[3];
Array.Copy(a, 1, b, 0, 3);
Est-il un moyen simple de ce genre pour faire la même tâche en C++?
Mieux encore, utiliser la
std::vector
au lieu des tableaux en premier lieu. Il a un constructeur qui fait ce que vous êtes en train de faire, parmi de nombreuses autres fonctionnalités.OriginalL'auteur | 2012-06-19
Vous devez vous connecter pour publier un commentaire.
Oui, l'utilisation
std::copy
:L'équivalent de votre exemple en C# serait:
Merci @RichardJ.RossIII. Il fonctionne très bien.
J'irais pour
copy_n
...std::copy_n( a+src_begin_index, elements_to_copy, b+dst_begin_index )
OriginalL'auteur Fanael
En supposant que vous voulez un allouée dynamiquement tableau comme dans l'exemple en C#, de la façon la plus simple est:
Cela a aussi l'avantage qu'il va automatiquement libérer la mémoire allouée lorsqu'elle est détruite; si vous utilisez
new
- même, alors vous aurez également besoin d'utiliserdelete
pour éviter les fuites de mémoire.OriginalL'auteur Mike Seymour
Il est le
C
memcpy
de commande, que vous pouvez utiliser comme ceci:Il est également
std::copy
, ce qui est un plusC++
façon de le faire:Notez qu'aucune de ces fonctions, assurez-vous que suffisamment de mémoire a été allouée, donc à utiliser à vos risques et périls!
std:copy
est incorrect, car le deuxième argument doit être un passé la fin (source+elementsInSource
), sans le -1ok, merci. Je n'ai pas utilisé le C++, donc merci pour cette remarque.
OriginalL'auteur Richard J. Ross III
Pour de simples C-style des tableaux, vous pouvez utiliser
memcpy
:Cette ligne de copies
sizeof(int) * 3
octets (c'est à dire 12 octets) à partir de l'index 1 dea
, avecb
en tant que destination.OriginalL'auteur Some programmer dude
Oui, à l'aide de st bibliothèque standard de l'algorithme de
copy
:OriginalL'auteur jpalecek