Usuwanie obiektu z tablicy obiektów

0

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.

1

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.

1

A to ma być ta sama tablica?

  1. Jeśli nie to stwórz drugą tablicę i przepisz wartości ze starej tablicy pomijając wybrany element;
  2. 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?
0

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.

0
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/

1 użytkowników online, w tym zalogowanych: 0, gości: 1