Dynamiczna alokacja tablic dwuwymiarowych

0

Witam :) Jestem osobą początkującą jeśli chodzi o programowanie, dlatego póki co często mam problemy nawet z podstawowymi zagadnieniami.
Piszę tu, gdyż nie mogę zrozumieć do końca dynamicznego alokowania tablic w tym przypadku dwuwymiarowych. Ale konkretniej.
Próbuję napisać program obliczający wyznacznik macierzy 4x4. Nie wiem czy dobrze kombinuję jak to zrobić, ale to na razie nieważne. W każdym razie chcę napisać funkcję tworzącą minor danej macierzy zatem wymiar tablicy muszę zamienić na 3x3 i wykreślić jeden wiersz i jedną kolumnę. Przeglądając internet doszłam do wniosku, nie wiem czy słusznie że jedynym sposobem jest dynamiczne zaalokowanie tablicy. Jednak tu pojawia się właśnie problem. Tablice utworzyć, utworzyłam. Dla jasności wygląda to tak, mam nadzieję że chociaż tu błędu nie zrobiłam ;)

int main()
{
	int rozmiar = 4;
	double **macierz = new double *[rozmiar]; // tablica na wskazniki
	// generowwanie poszczegolnych wymiarow;
	for (int i = 0; i<rozmiar; i++)
	macierz[i] = new double [rozmiar];
 
	double liczby[]= {3,2,-1,0,-2,1,2,-2,4,-2,-1,3,0,2,-3,-1};
	int k=0;
	for (int i=0; i<rozmiar; i++)
		for(int j=0; j<rozmiar; j++)
		{
			macierz[i][j]= liczby[k];
			k++;
		}
       for (int i = 0; i<rozmiar; i++)
	delete [] macierz[i];
	delete [] macierz;
	return 0;
}
 

Ale mam teraz takie pytania:

  1. Czy jest jakiś wygodniejszy sposób na przypisanie wartości tablicy? Np. coś podobnego jak w statycznym tworzeniu tablicy, że wystarczył prosty zapis w klamerkach.
  2. W jaki sposób mam się do tej tablicy odwołać w tworzonej funkcji ? Jak zapisać jej argument ?
  3. W jaki sposób będę mogła zmienić rozmiar macierzy oraz usunąc pewne jej elementy ?

Z góry dziękuję za pomoc :)

0

Nie używaj bezmyślnie postinkrementacji: http://4programmers.net/Forum/1101404

Ad 1. double mat4x4[4][4]={{3,2,-1,0},{-2,1,2,-2},{4,-2,-1,3},{0,2,-3,-1}};
Ad 2. Właściwie to nie ma takiej możliwości, generalnie można wywołać funkcje: foo(&mat4x4[0][0],4,4); gdzie:

void foo(double *mat,size_t Y,size_t X)
  {
   size_t x,y;
   for(y=0;y<Y;++y) for(x=0;x<X;++x) mat[y*X+x]=(y+1)*(x+1);
  }

ale w C++ już to teoretycznie UB mimo że praktycznie jeszcze nie spotkałem by gdzieś coś kiedyś źle zadziałało
Ad 3. Tworzysz nową; przepisujesz dane; usuwasz starą; podmieniasz wskaźnik.

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