Skocz do zawartości
DiJo

[c++] Dynamiczna Tablica 2-wymiarowa

Rekomendowane odpowiedzi

cześć, sorki za takie pytanie... ale gdzie tu jest błąd?

int **plansza;	*plansza=new *int[punkty];	for (i=0; i < punkty; i++) {		plansza[i]=new int[punkty];	}
w g++ zawsze mi się takie coś kompilowało (albo mnie juz skleroza dopadła) bez zadnych błędów ani warning'ów a w devc++ nie chce (expected identifier before '*' token ). W google szukam, ale tam są tylko jednowymiarowe (a ja chciałbym dwu :P ) a ksiazke pozyczylem kumplowi :( plis jak ma ktoś pare sekund to prosze o pomoc :)

pozdr.

ps. błąd jest imo w drugiej linijce <_<

 

 

ps2. dobra, niewazne :) jakoś sobie z tym poradziłem inaczej... sorki za zaśmiecanie =]

Edytowane przez DiJo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

wskaźnik na tablice wskaźników.. brrrr.... nie lepiej użyć stl::vectora? :)

 

#include <vector>using namespace std;...vector<vector[int]> > plansza;for(int i=0;i<punkty;i++){	vector[int] wiersz(szerokosc);	plansza.push_back(wiersz);}// i dostęp...plansza[x][y]=4;
o ile czegoś nie pomyliłem... mimo że wektory są wolniejsze niż tablice to przy dzisiejeszym sprzęcie ma to niewielki wpływ na szybkość.. jeśli tablica nie jest jakimś newralgicznym punktem programu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

int **plansza;	plansza=new int*[punkty];	for (int i=0; i < punkty; i++) {		plansza[i]=new int[punkty];	}
W ten sposób działa :]

 

Ja jak już mam deklarować takie coś to też wole vector albo po prostu deklaruje tablice jednowymiarową a odwołuje się przez plansza[x*y]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

poczytaj trochę o STL (standard template library) i o vektorach... gwarantuję Ci że CI sie spodobają i tablic będziesz już rzadko używał :). Nie jest to trudne.. na początku może być troche nie zrozumiałe....

 

po prostu jest to klasa pewnego pojemnika na dane która deklarujesz tak:

vector<typ> nazwa;
jeśli chcesz mieć tablicę floatów np to piszesz:

vector<float> tab1;	// tablica floatówtab1.push_back(2.45);   // dodanie do wektora liczby 2.45 - wektor sam sie rozszerza jak mu dodajesz nowe elementytab1.push_back(3.14);   // dodanie do wektora liczby 3.14cout<< tab1[1];		   // wypisanie na cout 2 elementu wektora czyli 3.14cout<< tab1.at(1);	   // jak wyzej tylko ze sprawdzaniem czy index jest poprawnycout<< tab1.size();	 // aktualny rozmiar tablicy tutaj da 2 -nigdy wiecej nie musisz trzymać max indexu tablicy dynamicznej :)for(unsigned int i=0;i<tab1.size();i++)	 // wypisanie wszystkich  lementów vektora po kolei	cout<< tab1[i];for(vector<int>::iterator it=tab1.begin();it!=tab1.end();it++) // jak wyzej tylko z uzyciem iteratora (rodzaj wskaźnika na kolejny element w wektorze)	cout<< *it;tab1.clear();	  // wyczyszczenie wektora - usuniecie wsyzstkich przetrzymywanych wartosci
to takie najprostsze i najczesciej stosowane metody klasy vector.

oczywiscie nic nie stoi na przeszkodzie żeby zrobić definicję zawierającą zbiór obiektów jakeijs klasy:

vector<cMojaKlasa> mojeObiekty;
albo wektor o dowolnym wymiarze:

vector<vector<vector[int]> > > wektor3Dint;

tylko przy wielowymiarowych konstrukcjach trochę skomplikowane może wydać się wstawianie czego do wektora... dlatego warto poćwiczyć wektory na zwykłych 1 wymiarowych

Edytowane przez PelzaK

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

przesadzasz... robiłem prace mgr w której baaaaardzo ostro wykorzystywałem vectory i w ciągu sekundy było średnio na oko kilkanaście tysiecy operacji na vektorach... W zwykłych programach nie ma obaw przed tym co straszą.. że vektory są powolne... Nie opłaca się ich robić tylko w silnikach 3D :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

no chyba że tak... :) to współczuję :) W normalnych programach to nie jest wymagane... najwyżej po zrobieniu programu pisze się wymagania sprzętowe, w których umieszcza sie odpowiednio szybki procesor :) i po sprawie....

 

Podobnie jak w Polsce łata się dziury w ulicach, najtańszym kosztem... stawia się znak drogowy informujący kierowców: uszkodzona nawierzchnia :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

...

Podobnie jak w Polsce łata się dziury w ulicach, najtańszym kosztem... stawia się znak drogowy informujący kierowców: uszkodzona nawierzchnia :D

i pod spodem tabliczka: na odcinku 30km :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...