1. Można jedynie wygodnie inicjalizować tablice w klamerkach. Po utworzeniu tablicy takie zbiorowe przypisanie jest już niemożliwe. W momencie utworzenia tablicy o stałym rozmiarze, owszem:
int tablica[ 3 ][ 5 ] =
{
{ 1, 2, 3, 4, 5 },
{ 6, 7, 8, 9, 10 },
{ 11, 12, 13, 14, 15 }
};
W przypadku tablic dynamicznych jest to niemożliwe, bo w momencie pisania kodu nie znasz rozmiaru tablicy, więc kompilator nie może sprawdzić, czy takie przypisanie miałoby sens. Trzeba więc wartość po wartości wpisywać.
2. Niech odpowiedzią na to pytanie będzie poniższy kod:
#include <iostream>
using namespace std;
void wypisz( int ** tablica, int kolumny, int wiersze )
{
for( int i = 0; i < wiersze; i++ )
{
for( int j = 0; j < kolumny; j++ )
cout << tablica[ i ][ j ] << '\t';
cout << endl;
}
}
int main()
{
const int WIERSZE = 4;
const int KOLUMNY = 3;
int ** tablica = new int*[ WIERSZE ];
for( int i = 0; i < WIERSZE; i++ )
{
tablica[ i ] = new int[ KOLUMNY ];
}
int n = 1;
// Uzupełnianie tablicy liczbami
for( int i = 0; i < WIERSZE; i++ )
{
for( int j = 0; j < KOLUMNY; j++ )
{
tablica[ i ][ j ] = n;
n++;
}
}
wypisz( tablica, KOLUMNY, WIERSZE );
return 0;
}
3. Zmiana rozmiaru wiąże się ze stworzeniem nowej tablicy, natomiast "usunięcie pewnych elementów macierzy", to masz na myśli wpisanie w tamte komórki zer? Czy może, np. odcięcie jednej kolumny z prawej strony (to wtedy jest po prostu zmiana rozmiaru).
Tak czy inaczej wiąże się to z realokacją całego macierza. Czyli chcąc pomniejszyć macierz zachowując obecne wartości, musisz stworzyć nowy, mniejszy macierz, przepisać do niego wartości i wykasować stary.
Ja bym proponował zainteresować się klasą vector. Mogłabyś stworzyć wektor wektorów i zmiana rozmiarów macierza byłaby wtedy niesamowicie ułatwiona, bo sprowadzałaby się do wywoływania jednej funkcji.
Pozdrawiam :-)