Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Organizacja pamięci dla tekstu w programie typu notepad

Ostatnio zmodyfikowano 2018-11-06 00:44
Autor Wiadomość
Nazgul
Temat założony przez niniejszego użytkownika
Organizacja pamięci dla tekstu w programie typu notepad
» 2018-11-05 05:02:24
Cześć,
Jak w temacie, dodam jeszcze, że nie korzystam z winapi, Qt itp. a tekst trzymam w tablicy charów.

Zastanawiam się czy trzymanie tego w standardowym std::vector'ze będzie optymalne (przykład: mam zapisane 1000000 znaków, a dopisanie jednego znaku na samym początku wiąże się z milionem operacji przesuwania każdego z następnych o jeden dalej) ---- tak chyba działa też std::string

więc pozostaje std::list ; z dodawaniem tekstu gdziekolwiek nie ma problemu, ale.. znajdywanie miejsca między którymi znakami kliknął użytkownik już zaczyna być gorsze, do tego znacznie wzrasta zapotrzebowanie pamięci (na 64-bit systemie aż 9krotnie! (8bit char, 64bit *pnext))

jest jeszcze tablica dwuwymiarowa (std::vector<std::vector<char>>) gdzie pierwszym wymiarem byłby wiersz, a drugim index znaku w wierszu (text[lineIndex][charIndex])

Pomysł z tablicą dwuwymiarową wydaje mi się najlepszym pomysłem, ale wolałbym się upewnić, czy to właściwe podejście. Dlatego pytam bardziej doświadczonych.
P-172752
pekfos
» 2018-11-05 08:30:53
Wciąż możesz mieć milion znaków w jednej linii.

więc pozostaje std::list ; z dodawaniem tekstu gdziekolwiek nie ma problemu, ale.. znajdywanie miejsca między którymi znakami kliknął użytkownik już zaczyna być gorsze, do tego znacznie wzrasta zapotrzebowanie pamięci (na 64-bit systemie aż 9krotnie! (8bit char, 64bit *pnext))
Chyba zapominasz, że std::list jest listą podwójnie łączoną.
Jakbyś zrobił listę wektorów, te kilka wskaźników nie będzie już takie straszne. Tylko musisz pilnować by żaden z wektorów nie przekroczył określonego progu. Np jeśli jakiś osiągnie 128k znaków, podziel go na dwa. Jakiś przypadek w podobnym stylu na scalanie dwóch wektorów.
P-172753
Nazgul
Temat założony przez niniejszego użytkownika
» 2018-11-06 00:44:12
haha okej, przynajmniej moje obawy że to jednak nie jest takie proste zostały potwierdzone;)

Pozostanę przy tablicy wektorów i dam jakiś rozsądny ogranicznik z maksymalną szerokością linii (nie będę dzielił na oddzielne vectory, żeby za bardzo nie komplikować funkcji renderującej tego tekstu)

Dzięki za pomoc;)
P-172764
« 1 »
  Strona 1 z 1