Cześć otóż mam taki problem mam przykładowo tablicę obiektów która ma w sobie 10 obiektów.Musze z tej tablicy usunąć obiekt wybrany przez użytkownika i nie mam pojęcia jak to zrobić.Próbowałem delete[liczbaWybranaPrzezUzytkownika]tab ale niestety nie działa próbowałem też delete &(tab[liczbaWybranaPrzezUzytkownika]) i również się nie udało.Czy moglibyście mi podpowiedzieć jak to można zrobić? Jest to projekt na studia także póki co odpada std::vector.
Z góry dziękuje za odpowiedzi.
a) usuń daną instancję obiektu, a następnie zmniejsz rozmiar tablicy, przesuwając każdy następujący po wskazanym indeksie obiekt na poprzednie miejsce.
lub
b) usuń daną instancję obiektu, a w jego miejsce wstaw null
:-P
Pomoc do podpunktu a
: narysuj sobie na kartce dziesięć kratek, uzupełnij je kolejnymi liczbami naturalnymi, po czym usuń ręcznie na przykład siódmą i przyjrzyj się, co musisz zrobić z liczbami następującymi po tej usuwanej, aby ostatnia kratka została zwolniona.
A to ma być ta sama tablica?
- Jeśli nie to stwórz drugą tablicę i przepisz wartości ze starej tablicy pomijając wybrany element;
- Jeśli tak to patrz punkt poprzedni, skasuj pierwszą tablicę (operator delete) i stwórz na nowo (operator new) z wielkością o jeden mniejszą niż poprzedni a następnie przepisz wartości z drugiej tablicy.
Tak prosto nie będzie że wpiszesz delete któryś element tablicy, to nie vector, piszecie to żeby wiedzieć jak działa klasa vector czy jak?
Ja napisałem tylko problem który ja napotkałem program jest trochę bardziej złożony.Głównie chodzi w nim o operacje na pamięci typu czyszczenie przydzielanie itd.O sposobach o których piszecie wiedziałem ale miałem nadzieję że da się to zrobić krócej i prościej :) Mimo wszystko dziękuję za odpowiedzi i pozdrawiam.
int idx = 5; // indeks
int size = sizeof(tablica)/sizeof(tablica[0]); // zadziała tylko dla tablic o stałym rozmiarze
delete tablica[idx]; // jesli to tablica obiektów
while(idx < size) {
tablica[idx] = tablica[idx+1];
idx++;
}
// i teraz w zależności, jesli size liczysz tylko raz w calym programie:
size--;
// jesli size liczysz za każdym razem:
tablica_new = new int[size-1];
std::copy(std::begin(tablica), std::end(tablica), std::begin(tablica_new));
delete[] tablica;
tablica = tablica_new;
Patrz tutaj:
http://www.cplusplus.com/doc/tutorial/dynamic/