Samou85
Messages postés46Date d'inscriptionmardi 2 juin 2009StatutMembreDernière intervention 7 octobre 2009
-
29 juin 2009 à 13:07
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
30 juin 2009 à 00:07
Bonjour à tous!
j'ai un tableau de pointeur "T" et et à un moment donné je dois supprimer certaine cases de ce tableau, je voudrais savoir si le fait de faire par exemple:
Var
Point : ^integer;
T: Array of Point;
i:integer;
Begin
SetLength(T,25);
i:=5;
T[i]:=T[i+1];
for j:=i+1 to (n-1) do
begin
T[j]:=T[j+1];
end;
T[n]:=nil; //tel que "n" est sensé etre l'indice de la dernière case
end;
est ce que le code précédent supprime réellement la case (5) et décale les autres ou bien ça ne marche pas lorsque il s'agit de pointeurs???
Et si ce n'est pas le cas alors comment faire pour supprimer une case de ce tableau de pointeurs???
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 juin 2009 à 00:07
il te faut une methode POP/PUSH pour ton tableau :
type
pPnt = ^Pnt;
Pnt = integer;
TArPPnt = array of pPnt;
const
SizeOfPnt = SizeOf(Pnt);
function PushPnt(const AValue : Pnt; var ATap : TArPPnt): integer;
var ptr : pPnt;
begin
result := Length(ATap);
SetLength(ATap, result+1);
new(ptr);
ptr^ := AValue;
ATap[result] := ptr;
end;
function PopPnt(const Index: integer; var ATap: TArPnt): integer;
var ptr : pPnt;
begin
result := High(ATap);
ptr := ATap[Index];
Dispose(ptr);
if Index < result then
CopyMemory(@ATap[Index], @ATap[Index+1], (result-Index+1)*SizeOfPnt);
SetLength(ATAp, result);
end;
ou encore, deriver un objet TList avec le type pPnt a la place des declaration pointer.