Est-il moyen de la copie de l'ensemble du tableau dans un autre tableau? (Autres qu'à l'aide d'une boucle For)
Est le chemin de la copie de l'ensemble du tableau dans un autre tableau? D'autres qu'à l'aide d'une boucle for.
Ne le déplacer ou copie de commande de travail pour cela?
J'ai essayer mais il avait une erreur: "Incompatible types".
Dois-je en tenir à la boucle for?
Déplacer utilise une boucle for. Au moins il fait en Delphi 7. Quel est le code qui a causé l'erreur?
Je ne le savais pas. Déplacer et Copier à la fois l'origine d'une erreur. (Je n'ai pas les utiliser en même temps)
Se déplacer n'est pas utilise une boucle for. Il est écrit en asm, même en Delphi 7, et d'utiliser soit un rep movsd/movsb avec Delphi 7, ou beaucoup plus rapide FPU instructions dans les nouvelles versions de Delphi version.
Si les matrices sont de même type et de même fixe (non dynamique) taille ensuite, vous pouvez copier simplement en ajoutant l'un à l'autre (tableau1 := tableau2).
Malheureusement, c'est un tableau dynamique. Mais je vais le fichier que loin de référence pour l'avenir. merci. 😀
Je ne le savais pas. Déplacer et Copier à la fois l'origine d'une erreur. (Je n'ai pas les utiliser en même temps)
Se déplacer n'est pas utilise une boucle for. Il est écrit en asm, même en Delphi 7, et d'utiliser soit un rep movsd/movsb avec Delphi 7, ou beaucoup plus rapide FPU instructions dans les nouvelles versions de Delphi version.
Si les matrices sont de même type et de même fixe (non dynamique) taille ensuite, vous pouvez copier simplement en ajoutant l'un à l'autre (tableau1 := tableau2).
Malheureusement, c'est un tableau dynamique. Mais je vais le fichier que loin de référence pour l'avenir. merci. 😀
OriginalL'auteur Dian | 2010-08-23
Vous devez vous connecter pour publier un commentaire.
Pour être sur le côté sûr, utiliser le
Copy
fonction sur tableaux dynamiques, comme il gère les types gérés à l'interne. Les tableaux doivent être du même type, c'est à dire déclarées dans la même expression:ou par la définition d'un tableau personnalisé type:
alors vous pouvez faire:
Vous aurez à utiliser une boucle sur les tableaux statiques et quand on mélange des types de pile (non pas que je serais recommandons de le faire).
Si vous devez vraiment utiliser
Move
, n'oubliez pas de vérifier pour la longueur nulle, comme leA[0]
les constructions peuvent augmenter le contrôle de la portée des erreurs, (à l'exception notable deSizeOf(A[0])
, qui est géré par le compilateur de la magie et de ne jamais s'exécute en fait).Aussi jamais supposer que
A = A[0]
ouSizeOf(A) = Length(A) * SizeOf(A[0])
, que ce n'est vrai que pour les tableaux statiques et il va vous mordre vraiment mal si vous essayez de refactoriser énorme base de code de tableaux dynamiques.MaxInt
, c'est même plus pratique pour omettre les limites entièrement:a := Copy(b)
. Que des copies de l'ensemble de la matrice.vous pouvez partager la
Copy(Source)
truc avec nos tchèque "MVP", comme il semble qu'il vient de découvrir la possibilité d'omettre le dernier paramètre (honte sur moi accidentellement en visitant leur blog).OriginalL'auteur Viktor Svub
Pour les tableaux dynamiques:
Dans les tableaux dynamiques, l'instruction d'affectation des doublons, seule la référence au tableau, alors que SetLength fait le travail physique de la copie/reproduction, laissant deux distincts, indépendants des tableaux dynamiques.
OriginalL'auteur Alexander Patalenski
Voir article sur delphibasics.co.royaume-uni
Vous pouvez copier un tableau à l'aide de la méthode Copy (passage à 0 de l'indice et de la Longueur(la Source) que le comte de copier le contenu complet).
Ne PAS utiliser de Déplacer ou CopyMemory pour les tableaux de string/array/interface/etc géré types. Cela permettra de contourner Delphi ref comptage mécanique et entraîne des fuites de mémoire et des données corrompues.
OriginalL'auteur alex
1 - Si votre tableau ne contient pas de n'importe quelle chaîne ou un tableau dynamique, vous pouvez utiliser le déplacer, mais les tableaux dynamiques sont de ne pas être traités comme de taille fixe tableaux:
2 - Si votre tableau contient des chaînes ou autre contenu de référence tableau, vous devez utiliser une boucle:
OriginalL'auteur A.Bouchez
hmm...appel RtlMoveMemory de l'API....
Mais c'est d'une boucle for en effet...
OK.espérons que c'est déjà optimisé par des instructions SIMD...
ou ASM et appel instructions SIMD vous-même...
OriginalL'auteur user428138
De déplacement ou de Copie ne fonctionnera pas, vous pouvez utiliser CopyMemory, mais cela nécessite que le tableau est un contigious bloc de mémoire.
Tu veux dire "Déplacement n' toujours travail". Il copie tout simplement un tas d'octets depuis une position en mémoire à un autre. Qui peuvent se déplacer d'un tableau, à condition que le tableau occupe un bloc contigu de mémoire.
Déplacer et CopyMemory sont identiques (en fonction de -- la seule différence est que CopyMemory accepte les pointeurs comme arguments, alors que le Déplacement accepte les variables (déréférencé pointeurs)).
OriginalL'auteur Remko