ďťż

Ładny brzuch

j/w, jak stworzyć tablice wielowymiarową przy pomocy operatora new? taki kod jest błędny:cin >> x; char *s=new char [x][5];



Prawdopodobnie masz na myśli takie coś:
int *tab = new int[x]; for (int i=0;i<x;i++)  tab[i] = new int[y];
gdzie x i y to rozmiary tablicy.
Można też stworzyć tablicę de facto jednowymiarową, ale odwoływać się do niej przez odpowiednie makra, funkcje albo pisząc po prostu tab[x1+x*y1] podobnie jak do wielowymiarowej, jednak metoda tablicy wskaźników do tablic jest szybsza i wygodniejsza właściwie we wszystkim poza tworzeniem i usuwaniem.
Użytkownik Chmurek edytował ten post 03 kwiecień 2006, 17:57
Aha, jeśli sie tego inaczej nie da zrobić to trudno. W każdym razie Chmurek thx.

Właśnie edytowałem jak można inaczej, gdy odpisałeś. ;)



A Chmurek jak zwykle herezje uprawia ... facet sie pytal o tablice wielowymiarowa. To po co dajesz mu rozwiazanie z kupki tablic jednowymiarowych ?.

http://forum.ks-eksp...ndpost&p=558444

Ostra dyskusja miedzy Chmurkiem a st3tc-em ;)

Na koncu masz przyklad jak zrobic to co chcesz
Użytkownik st3tc edytował ten post 03 kwiecień 2006, 19:36
Ciekaw byłem kiedy napiszesz coś w tym temacie. ;)
W każdym razie opisałem zarówno implementację za pomocą tablicy tablic, jak i drugą - proponowaną przez Ciebie. Mógłbyś najpierw przeczytać, a później krytykować.
Wybór metody pozostawiam autorowi tematu.
Użytkownik Chmurek edytował ten post 03 kwiecień 2006, 20:19

jak i drugą - proponowaną przez Ciebie. Mógłbyś najpierw przeczytać, a później krytykować. Niby gdzie ?


Można też stworzyć tablicę de facto jednowymiarową, ale odwoływać się do niej przez odpowiednie makra, funkcje albo pisząc po prostu tab[x1+x*y1]
Bo chyba nie o tym ?. Bez jaj ... zastanow sie o czym ja mowie i o czym Ty ;) - ja mu recznie nei kaze wyliczac indexow.


jednak metoda tablicy wskaźników do tablic jest szybsza i wygodniejsza właściwie we wszystkim poza tworzeniem i usuwaniem. Bzdura na resorach. Rozpizdziel w pamieci (przepraszam za wyrazenie) == rozwalenie keszu procesorka i inne drobiazgi jak migotanie pamieci podrecznej czy chybienia w strony pamieci wlacznie (bo porozrzucane po ramie).

Pomijajac fakt ze alokacja wielu tablic - w przypadku "tablicy 2D" 5x5 zajmie 80 bajtow, a alokacja ciaglego bloku (jednowymiarowa z liczeniem indexu) lub wielowymiarowej (dostep poprzez [][]) zajmie 32 bajty ;)

Nie jestem - upierdliwy - no moze troszke :]
Użytkownik st3tc edytował ten post 03 kwiecień 2006, 20:31
Ok, to napisz jak wyobrażasz sobie stworzenie dynamicznej tablicy wielowymiarowej.
Bo w tamtym temacie podałeś taki kod:
#include <iostream> int main() { int (*tablica)[15] = new int[10][15]; int x, y; for( x = 0; x < 10; x ++ ) for( y = 0; y < 15; y ++ )tablica[x][y] = x*y; for( x = 0; x < 10; x ++ ) { for( y = 0; y < 15; y ++ )std::cout << tablica[x][y] << " "; std::cout << std::endl; } delete [] tablica; return 0; }
ale w nim jak widać jeden wymiar masz wpisany na sztywno.


j/w, jak stworzyć tablice wielowymiarową przy pomocy operatora new? taki kod jest błędny:cin >> x; char *s=new char [x][5];

Nie jestem ślepy - próbowałem dyskutować ogólnie o tablicach, a nie konkretnie o tym jak rozwiązać problem autora tematu.
Ale ok, spierać się z Tobą o nazewnictwo albo o to, że tablice wielowymiarowe z wymiaramia ustalanymi w trakcie pracy programu są przydatne raczej mi się nie chce, więc sądzę, że można go zamknąć. ;)

to ja może podam kod który na pewno działa i jest całkiem fajny ;)

int rozmiar1, rozmiar2; char **tablica; cin >> rozmiar1;  cin >> rozmiar2; tablica = new char *[rozmiar1]; for(int i=0; i<rozmiar1; i++) tablica[i] = new char[rozmiar2];


A czym się istota tego kodu różni od istoty tego, który ja podałem? Jedynie typy są inne.
to teraz jest nas dwóch ;) proponuję zakończyć dyskusję :)
Użytkownik Kabar edytował ten post 03 kwiecień 2006, 22:07
A czym się istota tego kodu różni od istoty tego, który ja podałem? Jedynie typy są inne. ;)
Poza tym logic pytał o tablicę. ;)
Swoją drogą...
1, 2, 3, 4.
Użytkownik Chmurek edytował ten post 03 kwiecień 2006, 22:09
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •