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

C++ rozmiar tablicy dwuwymiarowej

+1 głos
2,436 wizyt
pytanie zadane 21 maja 2016 w C i C++ przez igor1988bb Użytkownik (800 p.)
Witam wszystkich :)

Mam do was małe pytanko. Otóż mam tablice dwuwymiarową i chciałbym z niej wyciągnąć rozmiary poszczególnych elementów. string Tablica[24][5]= {
            {" "},{" "},{" "},{" "},/*00 - 03 */
            {"30","50"},                    /*04*/
            {"10","30","45"},              /*05*/
            {"00","15","30","45"},        /*06*/
            {"00","15","35","50"},       /*07*/
            {"05","20","40"},         /*08*/
            {"05","20","26","35","50"},/*09*/
            {"15","40","55"},         /*10*/
            {"10","25","45"},        /*11*/
            {"00","15","30","45"},       /*12*/
            {"00","15","35"},      /*13*/
            {"00","15","27","45"},     /*14*/
            {"00","15","35","55"},     /*15*/
            {"15","30","45"},
            {"00","25","50"},    /*17*/
            {"10","25","40","55"},    /*18*/
            {"15","35","40","55"},    /*19*/
            {"20","40"},    /*20*/
            {"10","30"},    /*21*/
            {"00","23"},    /*22*/
            {"00"}};

            Np mam  Tablica[4][  ] i chciałbym wiedzieć ile się w niej znajduje elementów. Da się coś takiego zrobić? Z góry dziękuję za pomoc

3 odpowiedzi

0 głosów
odpowiedź 21 maja 2016 przez Avernis Nałogowiec (27,400 p.)
możesz użyć vectora, lub mapy, i wtedy piszesz: nazwatablicy[x].size();
0 głosów
odpowiedź 21 maja 2016 przez Sebastian Fojcik Nałogowiec (43,040 p.)
edycja 21 maja 2016 przez Sebastian Fojcik

Patrząc teraz na ten Twój kod, chcesz wiedzieć ile elementów znajduje się w tablica[ 4 ][ ]? Powiem Ci. Znajduje się tam dokładnie 5 elementów typu string. Z czego tylko 2 pierwsze będą wstępnie zainicjalizowane wyrażeniami "30" oraz "50". 3 pozostałe będą po prostu puste, czyli będą zawierały NULL. (znak NULL to to samo co zapisanie "").

Wynika to z zasad inicjalizacji zbiorczej w C++. Jeśli inicjalizujesz 2 zmienne w tablicy, która zawiera 5 elementów, to wszystkie pozostałe elementy zostaną zainicjalizowane zerem.
Wynika z tego:

int tablica[ 5 ] = { 11, 22 );

Wartości poszczególnych elementów powyższej tablicy prezentują się następująco:

tablica[ 0 ] = 11
tablica[ 1 ] = 22
tablica[ 2 ] = 0
tablica[ 3 ] = 0
tablica[ 4 ] = 0

Tak samo jest w przypadku string. Tylko zamiast = 0 jest wywoływany domyślny konstruktor, zatem string nic nie zawiera:

string napis = "";

Dlatego w Twoim przypadku niezainicjalizowanie niektórych stringów powoduje, że są one puste, ale jednak istnieją w tablicy. Zatem taki zapis w Twoim kodzie:

{"30","50"},                    /*04*/

oznacza to samo co zapisanie:

{"30","50", "", "", ""},                    /*04*/

Teraz już rozumiesz dlaczego każdy wiersz ma mimo wszystko tyle samo elementów?
Nie ma takiej możliwości, że tablica[ 4 ][ ] i tablica[ 5 ][ ] będą miały inną ilość elementów. To się kłóci z prawem istnienia tablic w informatyce.

Zatem jeśli chcesz policzyć ile stringów w danym wierszy tablicy coś zawiera, to musisz to sobie policzyć w pętli. U Ciebie są 24 wiersze i 5 kolumn. Zatem sprawdzenie ile zapełnionych stringów zajmuje 5 wiersz zapisujesz następująco:

int ile = 0;

for( int i = 0; i < 5; i++ )
    if( tablica[ 4 ][ i ] != "" )
        ile++;

Zmienna ile będzie zawierała ilość elementów w wierszy piątym, które coś zawierają.

Jeśli masz jeszcze pytania, to pisz śmiało.
Pozdrawiam.

0 głosów
odpowiedź 21 maja 2016 przez niezalogowany
Tablica[4][] ma 5 elementów i każda inna też.

Podobne pytania

0 głosów
1 odpowiedź 960 wizyt
0 głosów
3 odpowiedzi 7,317 wizyt
pytanie zadane 13 kwietnia 2016 w C i C++ przez programmero Bywalec (2,420 p.)
0 głosów
2 odpowiedzi 1,646 wizyt
pytanie zadane 24 listopada 2020 w C i C++ przez Wolv63 Użytkownik (630 p.)

93,604 zapytań

142,529 odpowiedzi

322,997 komentarzy

63,092 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

Kursy INF.02 i INF.03
...