Skikkings is een van die mees gebruikte vorme van datastoor tydens die programbedryf. Hulle laat u toe om elemente van dieselfde soort in 'n geordende volgorde te orden en vinnig toegang daartoe te kry per indeks. Dikwels moet u die grootte van die skikking bepaal wanneer u toepassings in kragtige en buigsame programmeertale ontwikkel wat direkte toegang tot geheue moontlik maak, soos C ++.
Nodig
C ++ samesteller
Instruksies
Stap 1
Bepaal die grootte van die skikking tydens die kompileringstyd deur die grootte van die operator te bereken. Hierdie operateur gee die hoeveelheid geheue (in grepe) terug wat deur die argument daaraan oorgedra word. Die argument kan 'n veranderlike of 'n tipe-identifiseerder wees. Die grootte van die operateur gee die eindige hoeveelheid geheue wat deur die voorwerp beset is, terug in die stadium van programuitvoering (met inagneming van byvoorbeeld die instellings vir die belyning van die struktuurvelde), maar die berekening daarvan word in die samestellingstadium uitgevoer.
Stap 2
Deel die hele grootte deur die grootte van een element om die grootte van 'n skikking met behulp van die grootte van die operator te bepaal. As u byvoorbeeld die volgende definisie van 'n skikking het: int aTemp = {10, 20, 0xFFFF, -1, 16}, kan die grootte daarvan bereken word as: int nSize = sizeof (aTemp) / sizeof (aTemp [0]);
Stap 3
Vir 'n gemakliker gebruik van hierdie metode is dit sinvol om 'n makro te definieer: #define countof (a) (sizeof (a) / sizeof (a [0])) Let op, aangesien die waarde van die operator se grootte bereken word tyd, op die punt waar die berekening uitgevoer word, moet inligting oor die volume van die skikking en sy elemente eksplisiet beskikbaar wees. Met ander woorde, dit is onmoontlik om die parameters van 'n skikking van onbekende grootte te bepaal deur die eksterne verklaring daarvan.
Stap 4
Bepaal die grootte van die skikking tydens die uitvoering van die program deur die bekende teken van die beëindiging daarvan te gebruik. Een van die benaderings wat dit moontlik maak om data op te slaan en uit te stuur in die vorm van skikkings van onbepaalde lengte, is om 'n spesiale waarde toe te ken vir 'n teken wat die voltooiing van 'n datareeks aandui. Byvoorbeeld, een-byte C-styl snare wat karakter skikkings is, moet eindig met 'n waarde van 0, verpakte C-snaar skikkings met veranderlike lengte is nul-beëindig, en wyser skikkings moet nul-beëindig word.
Stap 5
Om die grootte van 'n skikking op hierdie manier voor te stel, skandeer dit element vir element totdat u die beëindigingselement vind. Verhoog die teller wat nie geïnisialiseer is tydens die skandering nie. Of verhoog die waarde van die wyser na 'n skikking-element en bereken na die skandering die verskil tussen die wysers en die huidige en eerste elemente.
Stap 6
Kry die grootte van 'n dinamiese skikking wat deur 'n raamwerk of biblioteekvoorwerp voorgestel word deur die metode daarvan te noem. Enige klasse wat die funksionaliteit van sulke skikkings saamvat, het metodes om die huidige aantal elemente te kry. Byvoorbeeld, die std:: vector-sjabloonklas van die C ++ standaardbiblioteek het 'n grootte-metode, die Qt-raamwerk se QVector-klas het 'n telmetode en die analoge CArray-klas van die MFC het 'n GetCount-metode.