Tablice wskaźników, dodawanie elementu do tablicy

0

Witam. Mam takie zadanie:
funkcja dodaje element na zadana (argument funkcji) pozycję w tablicy dynamicznej
Mam też takie rozwiązanie:

 void dodaj_dokladnie(int *tablica, int rozmiar,int pozycja)
{
	int liczba;
	cout<<"Jaka liczbe chcesz dodac?  ";
	cin>>liczba;
	cout<<endl;

	int *tab2;
	tab2=new int[rozmiar+1];

	for(int i=0;i<pozycja;i++)
		tab2[i]=tablica[i];
	tab2[pozycja]=liczba;

	for(int i=pozycja+1;i<rozmiar+1;i++)
		tab2[i]=tablica[i-1];
}

Problem polega na tym, że nie wiem jak przekształcić tę funkcję tak aby działała na zasadzie tablicy wskaźników.
Prosze o wszelkie podpowiedzi.
Próbowałem coś takiego, ale sam do końca tego nie rozumiem:

 void dodaj_dokladnie(int *tablica, int rozmiar,int pozycja)
{
	int liczba;
	cout<<"Jaka liczbe chcesz dodac?  ";
	cin>>liczba;
	cout<<endl;

	int *tab2=new int[rozmiar+1];
	int **tablicawsk =&tablica;

	for(int i=0;i<pozycja;i++)
		tab2[i]=*tablicawsk[i];
	tab2[pozycja]=liczba;

	for(int i=pozycja+1;i<rozmiar+1;i++)
		tab2[i]=*tablicawsk[i-1];
}
2

proponuję zacząć od zmiany nagłówka funkcji na:

void dodaj_dokladnie(int** tablica, int rozmiar, int element, int pozycja);

element wprowadzasz poza nią, a wewnątrz niej kolejno (pomijam sprawdzanie poprawności przekazanych parametrów):

  1. rezerwujesz pamięć na nową tablicę tablica2 o rozmiarze rozmiar + 1,
  2. kopiujesz elementy z tablica uwzględniając wstawienie element na określoną pozycja do tablica2,
  3. zwalniasz pamięć tablica,
  4. przypisujesz wskaźnik nowo utworzonej tablicy tablica2 do wskaźnika tablica.
0

Na podstawie Twoich sugestii napisałem coś takiego, ale to wciąż się nie chce skompilować.
Mam też pytanie, czy "**tablica" to jest wskaźnik na tablicę wskaźników?

void dodaj_dokladnie(int **tablica, int rozmiar,int pozycja, int liczba)
{

	int *tab2=new int[rozmiar+1];

	for(int i=0;i<pozycja;i++)
		tab2[i]=*tablica[i];
	tab2[pozycja]=liczba;

	for(int i=pozycja+1;i<rozmiar+1;i++)
		tab2[i]=*tablica[i-1];

	for(int i=0;i<rozmiar;i++)
		cout<<(int) tablica[i]<<" ";
	cout<<endl;

	for(int i=0;i<rozmiar+1;i++)
		cout<<(int) tab2[i]<<" ";
	cout<<endl;
	delete [] tablica;
	*tablica=tab2;

} 
1

Potrzebujesz jedynie zrobić małą korektę. Nie wyświetlaj zawartości tablicy w tej funkcji (rób to poza nią) oraz dodaj nawiasy w dwóch miejscach (*tablica)[i].

Bartek07 napisał(a):

Mam też pytanie, czy "**tablica" to jest wskaźnik na tablicę wskaźników?

tablica jest wskaźnikiem na wskaźnik. Przekazujesz nie sam adres na pierwszy element tablicy, a adres wskaźnika wskazujący na pierwszy element tablicy podczas wywołania:

int* tablica = new int[rozmiar];

dodaj_dokladnie(&tablica, rozmiar, 5, 0);
0

@EvilOne
Wielkie dzięki za pomoc. Działa tak jak chciałem.

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