Bardzo wiele zależy od tego, co rozumie przez "tablicę dynamiczną". Większość ludzi ma na myśli coś, w czym pamięć jest alokowana za pomocą tablicy-new i uwolniona przy pomocy array-delete. Jeśli tak jest w tym przypadku, to posiadanie cech na równi z std::vector
po prostu nie jest możliwe.
Powód jest dość prosty: std::vector
rutynowo przydziela fragment pamięci większy niż to konieczne, aby pomieścić liczbę aktualnie zapisywanych elementów. Następnie konstruuje obiekty w tej pamięci zgodnie z potrzebą rozszerzenia. Z tablicą-nową nie masz jednak wyboru - przydzielasz tablicę obiektów, więc jeśli przydzielisz przestrzeń dla (powiedzmy) 100 obiektów, otrzymasz 100 obiektów tworzonych w tym miejscu (natychmiast) . Nie ma po prostu bufora, którego część zawiera prawdziwe obiekty, a inna część to zwykła pamięć, nie zawierająca niczego.
Przypuszczam, że jeśli chcesz rozciągnąć punkt, można naśladować std::vector
i nadal przydzielać spację za pomocą tablicy-new. Aby to zrobić, wystarczy przydzielić tablicę z char
, a następnie użyć miejsca docelowego new
do utworzenia obiektów w tym surowym obszarze pamięci. Pozwala to prawie to samo, co std::vector
, ponieważ jest prawie to samo, co std::vector
. Ciągle brakuje (potencjalnego) poziom zadnie chociaż - std::vector
faktycznie przydziela pamięć za pośrednictwem obiektu podzielnik więc można zmienić dokładnie jak to przydziela jej surowej pamięci (domyślnie używa std::allocator<T>
, który wykorzystuje operator new
, ale jeśli chciał , możesz napisać przydział, który będzie używał new char[size]
, ale nie mogę sobie wyobrazić, dlaczego miałbyś).
Możesz, oczywiście, napisać dynamicznej tablicy do korzystania z obiektu przydzielania również. W tym momencie, ze względów praktycznych, właśnie wymyśliłeś na nowo std::vector
pod (prawdopodobnie) nową nazwą. W tym przypadku @sbi ma nadal rację: sam fakt, że nie jest standaryzowany oznacza, że wciąż brakuje jednej z głównych cech std:::vector
- jakości bycia znormalizowanym i znanym już wszystkim, którzy znają C++. Jednak nawet bez tego musimy rozciągnąć wyrażenie "dynamiczna tablica" na (a poza tym założyć) punkt przełomowy, aby uzyskać te same cechy, co std::vector
, nawet jeśli ignorujemy standaryzację.
Zapomniałaś o wielkiej biblioteki algorytmów dostarczany bezpłatnie z kompilatora. – DumbCoder
zobaczyć również http://stackoverflow.com/q/381621/1025391 – moooeeeep
oh no .. Powiedziałem wolne od błędów .. I wrote błędnie powyżej i teraz edytowane – Rajesh