Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Usuwanie zawartości wektora


Rekomendowane odpowiedzi

Opublikowano

Mam klasę A

i w niej vector

std::vector<B> K;

Czy żeby usunąć jego zawartość ( nie niszcząc obiektu klasy A ) powinienem zamienić to na

std::vector<B> *K;

oraz usunąć go za pomocą delete;

 

Czy może zostawić pierwszy zapis i usuwać za pomocą funkcji vectora?

Ktoś może mi to objaśnić, bo trochę się gubię w tej sprawie :P.

 

Oczywiście usuwam elementy vectora aby na nowo wypełnić go elementami.

 

 

Dodatkowe pytanie o destruktor ( bo o to też się rochodzi :P ).

Czy jeżeli nie mam w klasie wskaźników na jakąś klasę, ale za to mam np powyższy vector(pierwszy) to czy zrobienie konstruktora

~A(){};

oraz w klasie B

~B(){}

???

Ogólnie tak czytam o tym destruktorze i jakoś nie mogę sobie tego przyswoić...

pl ;)

Opublikowano

Żeby usunąć zawartość vectora możesz użyć funkcji erase().W argumentach podajesz iterator od którego elementu chcesz usunąć aż po element końcowy podany w drugim argumencie.

 

A drugiego pytania nie zrozumiałem.

nostaleh.png
Opublikowano

Przechowuj w std::vector'ku dynamicznie allokowane objekty (pointery do tych objektów).

Czyli będziesz miał:

std::vector<B*> wektor;

Do niego dodajesz dynamicznie zaalokowane objekty.

Potem jeżeli chcesz wyczyścić wektor, a nie chcesz usuwać objektów, to użyj przykładowo:

wektor.clear();

Wektor będzie pusty, a objekty pozostaną (bo były zaalokowane dynamicznie, a wektor przechowywał tylko wskaźniki do nich).

Tylko pamiętaj, że musisz mieć do nich jakiś wskaźnik poza wektorem, żeby mieć do nich dostęp, usunąć je później.

 

Ewentualnie możesz zrobić to referencajmi, ale po to są wskaźniki, właśnie do takich rzeczy.

 

Co do dodatkowego pytania - to nie jest konstruktor, tylko destruktor.

Usuwasz tylko objekty dynamicznie zaalokowane, czyli te stworzone z new.

 

Jeżeli masz coś w pamięci statycznej, to nie.

 

Powiedzmy tego nie:

B objekt1 = B();
B objekt2 = B(argument);
int liczba1 = 10;
bool prawdaczyfalsz = false;

A jak masz coś zaalokowane dynamicznie to tak:

B *objekt1 = new B();
Klasa *objekt213123 = new Klasa(argument, argument2);

I nie tylko...

Opublikowano

Zamiast gołych wskaźników użyj smart pointerów z biblioteki <memory> i nie przejmuj się delete:

 

std::vector<std::unique_ptr<B>> K;

 

Z takim czymś możesz wołać clear() wektora.

YOU MUST DIE

- Ganon, Koridai

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...