• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dynamiczna tablica dwuwymiarowa double

VPS Starter Arubacloud
0 głosów
1,649 wizyt
pytanie zadane 21 marca 2016 w C i C++ przez Corazzo Obywatel (1,040 p.)

Witam!

    double wiersze = 10;
    double kolumny = 6;

    double **tab;
    tab = new double *[wiersze];

    for (int i=0; i<wiersze; i++)
        {
        tab[i] = new double [kolumny];
        }

 

Sprawa wygląda tak, że przy robieniu dwuwymiarowej tablicy double gdy kompiluje program to wyskakuje błąd:

error: expression in new-declarator must have integral or enumeration type

Gdy robię ten sam sposób a tylko podmienię typ zmiennych na int - wszystko działa.

Również działa gdy zamiast:

tab = new double *[wiersze];
tab [i] = new double [kolumny];

napiszę:

tab = new double *[10];
tab [i] = new double [6];

Lecz czemu wyskakuje błąd w wersji pierwszej?

 

Z góry dziękuje za pomoc!

2 odpowiedzi

+3 głosów
odpowiedź 21 marca 2016 przez draghan VIP (106,230 p.)
wybrane 21 marca 2016 przez Corazzo
 
Najlepsza

Dlatego, że ilość elementów tablicy MUSI być całkowita. Typ elementów to inna sprawa, ale liczba określająca wymiar tablicy musi być całkowita.

int wiersze = 10; // wymiary tablicy (int)
int kolumny = 6;
 
double **tab; // elementy tablicy (double)
tab = new double *[wiersze];

 

0 głosów
odpowiedź 22 marca 2016 przez sebastian970 Użytkownik (710 p.)
edycja 22 marca 2016 przez sebastian970
Nie musi być całkowita jeżeli używamy "std::vectora" jako tablicy.

"Vector" jest tablicą dynamiczną lub kontenerem(jak zwał tak zwał) nie wymagającą określenia wymiaru tablicy a jego rozmiar może zmieniać się dynamicznie podczas działania programu.

Jest to dobre rozwiązanie ze względu na zaoszczędzoną pamięć bo w przypadku zwykłych tablic puste miejsca w tablicy także zajmują pamięć.

Poczytaj sobie o tym. Nie jest to trudne ;)
komentarz 22 marca 2016 przez draghan VIP (106,230 p.)

Nie musi być całkowita jeżeli używamy "std::vectora" jako tablicy.

Rozumiem, że według Ciebie std::vector może przechowywać 3.75 elementów?

Jest to dobre rozwiązanie ze względu na zaoszczędzoną pamięć

Czy wiesz, że std::vector przy dodawaniu elementu, nie alokuje każdorazowo po jednym, tylko robi sobie wewnętrzny magazyn na więcej elementów, niż w danej chwili jest wymagane?

komentarz 22 marca 2016 przez sebastian970 Użytkownik (710 p.)
Z tą liczbą całkowitą chodziło mi o to, że nie wymaga określenia ilości pamięci potrzebnego dla tablicy. A co do vectora to nie ma co się przyczepiać bo jest rozwiązaniem dla pytającego i z tego co czytałem w internecie jest bardziej przyjazny dla komputera od zwykłej tablicy.
komentarz 22 marca 2016 przez draghan VIP (106,230 p.)
Autor prosił o wyjaśnienie, dlaczego kompilator nie przepuszcza Jego zapisu, nie szukał alternatywy dla tablic dynamicznych.
komentarz 22 marca 2016 przez sebastian970 Użytkownik (710 p.)
Ale znalazł. Jak dla mnie to jak wygrać z rakiem.

Podobne pytania

0 głosów
2 odpowiedzi 544 wizyt
pytanie zadane 6 kwietnia 2016 w C i C++ przez mateusz12 Użytkownik (530 p.)
+1 głos
4 odpowiedzi 4,986 wizyt
pytanie zadane 14 września 2015 w C i C++ przez Wojtek Wiedeński Bywalec (2,460 p.)
0 głosów
1 odpowiedź 648 wizyt
pytanie zadane 13 stycznia 2019 w C i C++ przez Shimeo7 Obywatel (1,910 p.)

93,028 zapytań

141,991 odpowiedzi

321,294 komentarzy

62,375 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...