[C++] Realokacja pamięci, a kontener std::vector
Ostatnio zmodyfikowano 2012-10-12 22:36
diego997 Temat założony przez niniejszego użytkownika |
[C++] Realokacja pamięci, a kontener std::vector » 2012-10-12 21:45:59 Czesc mam pytanie jak realkouje pamiec vector czy on kopiuje zala zawartowsc nie wiem do tymczasowej zmiennej i poszerza o jeden czy jakos inaczej. Albo zalurzmy mam sobie tablice: int * tab = new int[ 100 ]; for( int i = 0; i < 100; i++ ) tab[ i ] = i;
I chcialby cos dodac do 100 elementu, czyli musze poszerzyc tablice o 1, wiec musze skopiowac dane do tymczasowej, potem stworzyc nowa i przekopiowac czy jest jakis inny sposob ? |
|
DejaVu |
» 2012-10-12 22:20:50 Nie musisz powiększać o jeden - możesz ją powiększyć np. o kolejne 100 elementów, robiąc rezerwację na ewentualne nowe elementy. Utworzenie nowego obszaru pamięci, który pomieści wszystkie dane jest konieczne, bowiem std::vector musi gwarantować ciągłość pamięci, tj. tak jakby to by była zwykła tablica zaalokowana dynamicznie. Aby zapobiegać częstym 'kopiowaniom' obiektów, należy wywołać metodę reserve(), podając jako argument przewidywaną liczbę obiektów. Nawet jak przekroczysz w trakcie pracy aplikacji wartość podaną w 'reserve' to nic się nie stanie złego - po prostu utworzy sobie tablicę większą, przekopiuje do niej obiekty i wszystko będzie dalej funkcjonowało jak należy. |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-10-12 22:36:39 Super dzieki ze mi wyjasniles przy okazji jak alokuje pamiec wektor ja myslalem ze to jest zrobione na liscie np. a jednak to dziala jak zwykla tablica. |
|
« 1 » |