Hi
Ich würde gerne mal wissen ob es da etwas ähnliches in FPC/Lazarus gibt.
Das tolle an diesen "Vectoren" ist das es wie ein array funktioniert aber dennoch sowas wie Delete[index] hat. Desweiteren reicht so ein Array für mein Vorhaben, da nichts wildes drin gespeichert werden soll.
Ein Record zum Beispiel, denn so ein Record lässt sich sehr schlecht in eine List einpflegen, da die immer ein TObject haben wollen. Ausserdem muss dann auch immer erst das Object erzeugt/zerstört werden.
Alternative in FPC zu c++ Vector
Alternative in FPC zu c++ Vector
Zuletzt geändert von hubblec4 am Di 10. Aug 2021, 19:15, insgesamt 1-mal geändert.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Alternative in FPC zu c++ Vector
Was spricht gegen eine spezialisierte Liste?
Damit TFPGList mit einen Record-Typen spezialisiert werden kann, muss dieser einen Vergleichsoperator mitbringen. Dies funktioniert wie im Beispiel nur mit dem Modeswitch advancedrecords; der Operator muss dann als Teil des Record-Typen definiert sein.
Man könnte die Syntax der Vektoren mit Typehelpern abbilden; diese müssen nach meinem Wissen aber für jeden Array-Typen neu definiert werden.
Code: Alles auswählen
program Project1;
{$mode objfpc}{$H+}
{$ModeSwitch advancedrecords}
uses
fgl;
type
{ TMyRecord }
TMyRecord = record
field1: Integer;
class operator =(const r1, r2: TMyRecord): boolean;
end;
TMyVector = specialize TFPGList<TMyRecord>;
{ TMyRecord }
class operator TMyRecord. = (const r1, r2: TMyRecord): boolean;
begin
Result := r1.field1 = r2.field1;
end;
var
list: TMyVector;
r: TMyRecord;
begin
list := TMyVector.Create;
list.Add(r);
list.Delete(0);
list.Destroy;
end.
Man könnte die Syntax der Vektoren mit Typehelpern abbilden; diese müssen nach meinem Wissen aber für jeden Array-Typen neu definiert werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: Alternative in FPC zu c++ Vector
Hi Socke.
Danke für die Info.
Also das eine FPGList einen Record aufnehmen kann wusste ich nicht, und das dieser Record noch einen Vergleichsoperator braucht, darauf wäre ich nie gekommen.
Aufjedenfall klingt es interessant und ich werde es ausprobieren.
Danke für die Info.
Also das eine FPGList einen Record aufnehmen kann wusste ich nicht, und das dieser Record noch einen Vergleichsoperator braucht, darauf wäre ich nie gekommen.
Aufjedenfall klingt es interessant und ich werde es ausprobieren.
-
- Beiträge: 955
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Alternative in FPC zu c++ Vector
TFPGList<> ist ein generischer Typ und solange der Typ mit dem dieser generischer Typ spezialisiert wird eben einen Vergleichsoperator mitbringt, gelingt diese Spezialisierung.hubblec4 hat geschrieben: Di 10. Aug 2021, 17:46 Also das eine FPGList einen Record aufnehmen kann wusste ich nicht, und das dieser Record noch einen Vergleichsoperator braucht, darauf wäre ich nie gekommen.
Alternativ kannst du seit FPC 3.2.0 auch den generischen TList<> Typ aus Generics.Collections verwenden, der braucht keinen Vergleichsoperator (falls man jedoch spezielle Bedingungen an den Vergleich hat, kann man einen entsprechenden IComparer<> verwenden).
FPC Compiler Entwickler