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

funkcja zwracająca ilość elementów w tablicy, C++

Object Storage Arubacloud
0 głosów
24,535 wizyt
pytanie zadane 14 lipca 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

Witam chciałem zrobić pętlę wykonującą się przez całą tablicę o nieznanej wielkości, oto kod: 

// variables to tablica
for(int i=1; i < variables[].size(); i++)
{
    ///[. . . ]
}

Czy mógłby mi ktoś napisać jak to najprościej zrobić ? Widziałem sposób z użyciem wskaźników i sizeof, ale wolałbym coś na wzór brzytwy Ockhama. 

Dziękuje za uwagę i pomoc :) Miłego wieczora ;)

3 odpowiedzi

+2 głosów
odpowiedź 14 lipca 2017 przez Bondrusiek Maniak (61,370 p.)
wybrane 14 lipca 2017 przez Shiro
 
Najlepsza

Witam,

możesz użyć operatora sizeof. Możesz zastosować taki warunek: sizeof(tablica)/sizeof(typ)

// variables to tablica
//zakładam że tablica jest int ale to jest bez znaczenia
int length = sizeof(variables)/sizeof(int)
for(int i=1; i < length; i++)
{
    ///[. . . ]
}

 

komentarz 14 lipca 2017 przez Shiro Stary wyjadacz (10,300 p.)
Tak to jest to!
+2 głosów
odpowiedź 15 lipca 2017 przez draghan VIP (106,230 p.)

Można pobawić się operatorem sizeof(), jak to zrobił Bondrusiek... Należy tutaj jednak podkreślić, że jeśli variables została przekazana do funkcji jako argument, to taki zabieg nie zwróci "oczekiwanej" liczby elementów tablicy, stąd też nie można zrobić sobie sparametryzowanej funkcji, która będzie zwracała wielkość tablicy (przynajmniej w taki "naiwny" sposób*). Powód? Przy przekazywaniu tablicy do funkcji, jest ona konwertowana na wskaźnik. Wtedy operator sizeof(variables) zwróci nie rozmiar całej tablicy, lecz wskaźnika właśnie.

 


* - jeśli już ktoś pragnąłby coś takiego napisać, to jest to możliwe. Wystarczy użyć "sztuczki" z szablonem. Dla każdego rozmiaru tablicy zostanie wygenerowana osobna konkretna forma funkcji szablonowej.

template <typename T, size_t size>
constexpr size_t array_size(T(&)[size])
{
    return size;
}

Zupełnie inną sprawą jest to, że w zasadzie niezależnie od tego, czy tablica jest statyczna czy dynamiczna, programista posiada (a przynajmniej powinien) informację o rozmiarze tablicy. Przecież kompilator nie ustala rozmiaru tablicy na podstawie aktualnego położenia Marsa względem Słońca, programista jawnie w kodzie źródłowym wskazuje rozmiar (dla tablic statycznych), a do utworzenia tablicy dynamicznej posiadamy liczbę elementów pobraną zapewne z jakiegoś wejścia. Także potrzeba istnienia takiej funkcji to dla mnie sygnał, że coś w kodzie jest nie tak jak trzeba.

Najprostszym i najczystszym rozwiązaniem jest tutaj... biblioteka standardowa: std::array, std::vector i pokrewne.

2
komentarz 15 lipca 2017 przez criss Mędrzec (172,590 p.)
Tylko dopowiem, że coś podobnego do twojego array_size jest już w std :P
http://en.cppreference.com/w/cpp/types/extent
komentarz 15 lipca 2017 przez draghan VIP (106,230 p.)
Criss +1
0 głosów
odpowiedź 14 lipca 2017 przez Maciek Stanka Początkujący (290 p.)
Po co robić taką funkcje skoro jest już taka
komentarz 14 lipca 2017 przez Shiro Stary wyjadacz (10,300 p.)
Właśnie o taką funckję mi chodzi, o jej nazwę ;)

Podobne pytania

+1 głos
1 odpowiedź 330 wizyt
pytanie zadane 30 marca 2021 w C# przez mateusz45 Gaduła (3,240 p.)
0 głosów
1 odpowiedź 443 wizyt
pytanie zadane 27 października 2018 w C i C++ przez MAXIM7 Obywatel (1,990 p.)
0 głosów
2 odpowiedzi 225 wizyt

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,940 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!

...