Längere Texte
-
Hi,
wie speichert man längere Texte sinnvoll, sodass man später ohne große Speicherverschieberei Zeichen einfügen kann?
Mal ein Beispiel:f | v abcede ghijklm...
Wenn man den Text oben als einfaches char Array speichert, un man möchte einen Buchstaben euinfügen, muss man das ganze Array nach e um ein Byte nach hinten verschieben, was aber bei z.B. 10 Mb sehr lange dauern kann.
-> Deshalb die FrageDanke im Voraus
M.T.
-
ja nach verwendeter programmiersprache gibts verschiedene konstrukte meist schon fertig. z.b. container der STL unter C++ (vector), verkettete listen...
-
Fuer lange Texte verwendet man eigentlich Ropes. Aber da ist der Zugriff auf einzelne Zeichen lahm - da waere dann fuer einfuegen und loeschen definitiv eine list besser.
-
@Shade: Meinst du eine einfach verkettete Liste, bei der auf jedes Zeichen ein Listeneintrag kommt? - Das wäre nämlich irgendwie sehr Speicheraufwändig pro 1 Byte Zeichen einen 4 Byte Pointer auf das nächste Zeichen zu benutzen.
M.T.
-
Original erstellt von Manuel:
**@Shade: Meinst du eine einfach verkettete Liste, bei der auf jedes Zeichen ein Listeneintrag kommt? - Das wäre nämlich irgendwie sehr Speicheraufwändig pro 1 Byte Zeichen einen 4 Byte Pointer auf das nächste Zeichen zu benutzen.
**Du koenntest auch mit substrings arbeiten (so aehnlich machen es auch ropes)
Du sagst zB pro list-element 10 Zeichen, oder 20 ka - je nachdem was passt.
Dann musst du nur 10-20 Elemente kopieren wenn du etwas einfuegst...
Schau dir mal die rope aus der SGI STL an, die ist ziemlich gut. vielleicht genuegt dir das ja. Wenn nicht, dann wirst du um eine Aufteilung des strings nicht herumkommen...
-
Jetzt bitte nicht lachen, wo krieg ich das Sample her? Ich hab gerade im PSDK und in den MSDK Samples gesucht, aber nichts gefunden
Das mit den 10-20 Zeichen pro Listeneintrag wird wohl vom Speicher-Geschwindigkeits Verhältnis her das Beste sein.
M.T.
-
Sample?? Ich hab nix von Sample gesagt.
Ropes gibt es im Standard nicht - zB die SGI STL bietet diese aber an... Und ich nehme an, man bekommt Ropes auch noch woanders her. STLPort sollte eine Rope haben... Und es gibt sicher auch frei stehende ropes (also ohne, dass sie an eine STL Implementation gebunden sind)
Allerdings wie gesagt: eine Rope ist ziemlich langsam was Zugriff und Veraenderung von einzelnen Zeichen betrifft...
Ich waere also auch fuer die list
-
Sample?? Ich hab nix von Sample gesagt
Lesen können muss was schönes sein - das lern ich mal in der Sommerferien
Ich werd mal die Listen-Variante implementieren
Danke für die Entscheidungshilfe
M.T.
-
hmm ich würd das ganz naiv machen (insofern ich davon ausgehen kann das es ein richtiger text ist). dann würd ich einfach nen vector<string> machen und ein jedem string eine zeile speichern... der string sollte dann net zu lang sein und man kann denke ich gut einfügen...
-
@japro: Danke, ist auch ne gute Idee Ich werd mal beides testen, um zu sehen, was schneller ist.
M.T.