Seturi dinamice dinamice dinamice dinamice

Seturile dinamice sunt introduse în Object Pascal numai începând cu Delphi 4. Ele diferă de matricele statice obișnuite în sensul că ele nu declară lungimea în prealabil - numărul elementelor. Prin urmare, este convenabil să se utilizeze matrice dinamice în aplicații în care volumul de matrice prelucrate este pre-necunoscut și este determinat în cursul execuției, în funcție de acțiunile utilizatorului sau de cantitatea de informații procesate.







<имя> array de <базовый тип>

var A: mulțimea întregului;

declară variabila A ca o matrice dinamică de întregi.

alocă pentru matricea A o locație de memorie pentru 10 elemente și stabilește valorile zero ale tuturor elementelor.

Indicii unei matrice dinamice sunt întotdeauna întregi începând cu 0. Astfel, în exemplul de mai sus, matricea conține elemente de la A [0] la A [9].

var A: mulțimea întregului;

Cu toate acestea, trunchierea unei matrice dinamice se face cel mai bine cu funcția Crupă, atribuind rezultatul acesteia matricei în sine. De exemplu, operatorul

trunchiază matricea dinamică A, lăsând primele trei elemente neschimbate.

Dacă matricea dinamică este deja alocată în memorie, puteți utiliza funcția Lungime, lungimea matricei, cea mai mare valoare a indexului (este evident că Always High = Lungime - 1) și Low - cea mai mică valoare a indexului (întotdeauna 0) . Dacă matricea are o lungime zero, atunci valoarea High revine -1, adică se pare că High





Variabila unei matrice dinamice în sine este un pointer la începutul matricei. Dacă spațiul din matrice nu este deja alocat, valoarea variabilei este zero. Dar acest lucru nu este un indice obișnuit. Nu poate fi dereferențiată de operațiune, nu poate fi trecută la procedurile noi și la eliminare.

Puteți elimina o matrice dinamică din memorie într-unul din următoarele moduri: să-i atribuiți o valoare nulă, să utilizați funcția Finalizați sau să setați lungimea la zero. Astfel, următorii operatori sunt echivalenți:

Dacă matricele dinamice sunt definite ca variabile de același tip, de exemplu

var A, B: mulțimea întregului;

iar dimensiunea matricei A nu este mai mică decât dimensiunea matricei B sau A = zero, atunci

alocarea formularului este posibilă

care determină ca variabila B să înceapă să indice aceeași matrice ca A, adică se pare, ca atare, două pseudonime pentru o singură matrice. Conținutul matricei B este astfel șters. Aceasta este diferența fundamentală în alocarea matricelor statice și dinamice.

Dacă matricele dinamice nu sunt declarate ca variabile de același tip, adică

var A: mulțimea întregului;

În: matricea întregului;

în general nu este permisă.

În operațiile de comparare a rețelelor dinamice, sunt comparate numai indicii în sine, nu valorile elementelor matrice. Astfel, expresia A = B este adevărată numai dacă A și B indică aceeași matrice. Dar expresia A [0] = B [0] compară valorile primelor elemente ale două matrice.

Seturile dinamice pot fi transferate ca parametri pentru acele funcții și proceduri în ale căror descrieri parametrul este declarat ca o matrice de tip de bază fără a specifica un index, adică o matrice deschisă. De exemplu, funcția

funcția CheckStrings (A: matrice de șir): Boolean;

pot funcționa în mod egal atât cu matrice statice, cât și cu dinamică.







Articole similare

Trimiteți-le prietenilor: