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

Podwójny operator strzałki do zagnieżdzonych klas

Ostatnio zmodyfikowano 2016-04-03 07:48
Autor Wiadomość
Elaine
» 2016-03-23 08:11:18
Ale gdyby tak rozszerzać tablicę ze skokiem kilkadziesąt obiektów
No to gratuluję bo właśnie "wynalazłeś" to co robi vector już od lat 90'tych zeszłego wieku
std::vector nie może w ten sposób się rozszerzać, bo według standardu push_back itp. ma amortyzowaną złożoność stałą, podczas gdy rozszerzanie ze skokiem o naturalne N powoduje, że ta operacja ma złożoność liniową; dlatego std::vector rozszerza się poprzez przemnożenie poprzedniego rozmiaru przez jakąś liczbę rzeczywistą, najczęściej 1.5 lub 2.
P-146456
mokrowski
» 2016-03-23 12:01:29
Ba, oczywiście że przemnaża :-) Nie wyraziłem się jasno.. Dość jednak że stosuje mechanizm powiększania na żądanie i tu nie ma sensu tego zmieniać.

Alokacja i to o czym wspomniał/wspomniała @Aluerii to sensowny i rozsądny algorytm wybierany przez _dostawców_ kompilatorów który bywa (choć z moich doświadczeń rzadko) zastępowany innym. Zdarzało mi się to dla mikrokontrolerów (zamieniałem na wartość alokatora na stałą jak to sugerował @LuK bo naprawdę było mało RAM) lub na "alokator  pulowy"/operator new z puli jeśli koszt alokacji był zbyt wysoki (np. małe obiekty i kiepski mechanizm zarządzania alokacją platformy).

Co do samego algorytmu alokacji, gcc robi to inaczej, Visual Studio inaczej, clang jeszcze inaczej :-) Nawet zmieniały się algorytmy z wersji na wersję.

Trzymam się stanowiska że jeśli nie ma powodu aby stosować "surowe" tablice (jest przecież np. <array>) lub arytmetykę wskaźników, należy tego _unikać_a w 90% sprawdza się vector (oczywiście te 90% podaję z własnego doświadczenia :-) )
P-146459
Elaine
» 2016-03-23 13:41:01
gcc robi to inaczej, Visual Studio inaczej, clang jeszcze inaczej
To zależy od implementacji biblioteki standardowej, nie od kompilatora. Istnieją implementacje niezależne od kompilatora — nie wiem nawet, czy właśnie one nie stanowią większości, wszak nawet libstdc++ działa pod więcej niż jednym kompilatorem!
P-146464
mokrowski
» 2016-03-23 14:04:42
Oczywiście racja.. Widać pisanie na forum w stanie podgorączkowym nie służy co do precyzji wypowiedzi i buduje mylące skróty myślowe :-/

Kilka implementacji do samodzielnego przejrzenia jeśli chodzi o źródła. Pierwsze dwie już dojrzałe i dlatego może być problem ze zrozumieniem kodu przez początkujących bo optymalizacje poszły bardzo daleko i troszkę kod "ubarokowiły" :-)

http://libcxx.llvm.org - moim zdaniem najbardziej dopracowana ale także i bardzo aktywna. Dostępna często z clang'iem.
https://gcc.gnu.org/libstdc++/ - dystrybuowana wraz z rodziną kompilatorów gcc
http://www.stlport.org - wprawdzie nie biblioteka standardowa ale pokrywa zakres kontenerów przenośna ale niestety trochę już leciwa
https://www.sgi.com/tech/stl/ - klasyk :-)
https://cxx.uclibc.org/faq.html - w założeniu odchudzona i uproszczona
https://msharov.github.io/ustl/ - to samo...
...
No i jeszcze to co robi Dinkumware tu ciekawa seria do obejrzenia. Właśnie człowiek z Dinkumware :-)
https://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Standard-Template-Library-STL-/C9-Lectures-Introduction-to-STL-with-Stephan-T-Lavavej

P-146465
LuK
Temat założony przez niniejszego użytkownika
» 2016-04-03 03:48:40
No to gratuluję bo właśnie "wynalazłeś" to co robi vector już od lat 90'tych zeszłego wieku :-) W dodatku możesz zmienić klasę alokatora na własną jeśli nie podoba Ci się domyślne dynamiczne alokowanie obiektów.

Tak od czasu do czasu dokonuje odkryć z różnych dziedzin, od algorytmów przez matematykę po metody numeryczne . Ale teraz już wierzę, że iteraratory są szybkie, bo ich mechanizm szybkości w końcu sam wynalazłem :P

Napisz lepiej że chcesz tablicę "bo tak" bo coś widzę że szybo wyczerpią się argumenty :-)

Już są klasy zaprojektowane, dla małego programu typu jakiś edytor graficzny alokacja pamięci dla zmiennych rysowanych obiektów to są didaskalia. Nikt nie przekroczy pewnie dajmy na to 500. Ale jakby ktoś zrobił 501 elementów, to by się program sypnął, więc dynamiczna tablica musi być. Dlatego skupiam się tylko na implementacji algorytmów wokół i logiki programu.
P-146926
LuK
Temat założony przez niniejszego użytkownika
» 2016-04-03 03:51:41
P-146927
carlosmay
» 2016-04-03 07:48:15
Ale jakby ktoś zrobił 501 elementów, to by się program sypnął, więc dynamiczna tablica musi być
Tam gdzie można dynamicznie alokować zwykłą tablicę, można użyć vector'a.
Można też użyć np. std::unique_ptr dla alokowanej tablicy i zwolnić się z obowiązku pamiętania o oddaniu zasobów. shared_ptr jeśli do zasobu będzie odwoływać się więcej niż jeden wskaźnik.
P-146929
1 « 2 »
Poprzednia strona Strona 2 z 2