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

question-closed Stosowanie pętli zakresowych dla tablic

Object Storage Arubacloud
0 głosów
1,482 wizyt
pytanie zadane 23 lutego 2018 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 23 lutego 2018 przez Jakub 0

Witam, problem może prosty ale nie wiem jak z niego wybrnąć... 

Mamy taki fragment:

int main(){
    int arr[5] = {1,2,3,4,5};
     
    for(int i : arr)
        cout<<i<<endl;

    return 0;
}

Pętla zakresowa zadziała i wypiszemy elementy tablicy.

Ale gdy zrobię tak:

void show(int a[]){
       for(int i : a)
          cout<<i<<endl;
}

int main() { 
     int arr[5] = {1,2,3,4,5};
     show(arr);
     return 0;                                  
}

Są już błędy kompilacji: ta instrukcja „for” oparta na zakresie wymaga odpowiedniej funkcji "begin", a żadnej nie znaleziono   

Ogólnie nieco rozumiem skąd ten błąd, a[] to tylko wskaźnik na &arr[0] a nie orginalna tablica jaką mamy w main(). Nie wiem jak jednak temu zaradzić, jest jakiś sposób? Z góry dziękuje za pomoc ;)

komentarz zamknięcia: już wiem

1 odpowiedź

+1 głos
odpowiedź 23 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 23 lutego 2018 przez Jakub 0
 
Najlepsza

Możesz podać rozmiar tablicy lub użyć kontenerów. Niby jest możliwe nieco oszukać język i przesłać jednoelementową tablicę z konkretną tablicą, ale nie jest to eleganckie rozwiązanie.

void show(int a[][5])
{
	for (int i : a[0])
	{
		std::cout << i << std::endl;
	}
}
komentarz 23 lutego 2018 przez Jakub 0 Pasjonat (23,120 p.)
Dziękuje, ogólnie o ile zrobienie dla mnie zwykłej liczącej pętli for i odwoływanie się arr[i] nie stanowi problemu to słyszałem że pętle zakresowe są ogólnie bardziej eleganckie, to się jednak chyba odnosiło do obsługi kontenerów...
1
komentarz 23 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)

No sam widzisz, że język tak, a nie inaczej, obsługuje tablice przesyłane jako argumenty, Trzeba sobie z tym radzić, najbezpieczniej przesyłając kontener lub wrapper na zwykłą tablicę. Określanie rozmiaru tablicy na podstawie liczby przesyłanej w kolejnym argumencie to proszenie się o błędy, ale nikt nie zabrania ci tego używać.

Podobne pytania

+1 głos
5 odpowiedzi 3,042 wizyt
pytanie zadane 6 listopada 2015 w C i C++ przez Mr. Satan Początkujący (390 p.)
0 głosów
1 odpowiedź 332 wizyt
pytanie zadane 4 grudnia 2022 w C i C++ przez Janchess Początkujący (480 p.)
0 głosów
1 odpowiedź 538 wizyt
pytanie zadane 18 lutego 2017 w JavaScript przez bartas1990 Początkujący (470 p.)

92,568 zapytań

141,422 odpowiedzi

319,642 komentarzy

61,958 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...