11 Arrays și indicii

Arrays și indicii

Avantajele utilizării indicatorilor atunci când se ocupă cu elemente de matrice

Mergând dincolo de limitele matrice

Notă un alt aspect important al C-matrice în C ++. În C ++, nu există nici o monitorizare a conformității cu ieșire în străinătate C-matrice. Astfel. responsabil pentru aderarea la elementele de procesare în cadrul limitelor matrice se află în întregime pe dezvoltatorul algoritmului. Să considerăm un exemplu.
programul 11.4

Programul va aduce următoarele:

11.4 Programul face în mod intenționat o greșeală. Dar compilatorul nu raportează o eroare: array a anunțat cele cinci elemente, și în cicluri a însemnat că elementele 10! Ca urmare, dreptul de a fi inițializat doar cinci elemente (posibile date de corupție), acestea vor fi afișate și împreună cu „gunoi“. C ++ oferă posibilitatea de a controla frontierele cu ajutorul funcțiilor de bibliotecă (trebuie să includeți reluatorul fișierul header) începe () și final (). Noi modifica programul 11.4
programul 11.5

începe () și final () returneaza un iterator. Conceptul de iteratorii vom dezvălui mai târziu, dar acum să spunem că se comportă ca un indicator ce indică la primul element (primul) și elementul după ultima (ultima). În cadrul programului 11.5 Noi, pentru compactitatea și comoditate, înlocuit pentru buclă în timp ce (de la contorul avem aici nu este necesar - folosim indicatorul aritmetică). Cu două indicii putem formula cu ușurință condiția pentru ieșirea din bucla, ca fiecare iterație a indicelui de buclă este incrementat mai întâi.
Un alt mod de a face un ocol elemente în matrice mai sigure, bazate pe aplicarea gama pe bază pentru ciclul. am menționat în ciclul de instruire subiect cu opțiunea de (a se vedea. 9.3 Program)

Operațiuni noi și șterge

Până în momentul de cunoștință cu indicii ai fi cunoscut singurul mod de a înregistra date variabile în memorie prin variabile. Variabila - o zonă numită de memorie. memorii pentru variabilele respective sunt alocate în momentul de începere a programului și a utilizat până când acesta încetează să mai funcționeze. Folosind indicii pot crea blocuri de memorie fără nume de un anumit tip și dimensiune (precum și pentru a le elibera) în timpul funcționării programului. Acest lucru demonstrează remarcabile pointerii caracteristica, cel mai dezvăluit pe deplin în programarea orientată pe obiecte la crearea clase.
Alocarea dinamică a memoriei este realizată prin operația nou. sintaxa:

După efectuarea operației cu memoria selectată este necesară pentru a elibera (retur, pune la dispoziția altor date) folosind de ștergere. Controlul asupra cheltuirii memoriei - un aspect important al dezvoltării de aplicații. Memoria Erori nu este eliberat, duce la „pierderi de memorie“, care, la rândul său, poate provoca programul să se prăbușească. operațiunea de ștergere poate fi aplicat la un pointer la zero (nullptr) sau creat cu un nou (de exemplu, a.. noi si delete sunt folosite în perechi).

matrice dinamice

O matrice dinamică - o matrice a cărui dimensiune este determinată în cursul programului. Strict vorbind C-matrice nu este dinamic în C ++. Aceasta este, numai dimensiunea matrice poate fi determinată, și mărimea modificării matrice în timpul programului, rămâne imposibil. Pentru o serie de dimensiunea dorită este necesară alocarea de memorie pentru noua matrice și copia datele cu originalul, și apoi eliberează memoria alocată anterior în matrice originală. O matrice cu adevărat dinamic în C ++ este tipul de vector. pe care le vom vedea mai târziu. Pentru a izola matricea de memorie este utilizată în timpul funcționării nou. Sintaxa de memorie alocarea pentru matrice are forma:
pointer = nou tip [size]. De exemplu:

Eliberându produse folosind operatorul delete:

În acest caz, dimensiunea matrice nu este specificat.
Exemplu de program. Umple matrice număr întreg dinamic arr1 numere aleatoare. Arată matrice originală. Rescriem matrice nou întreg dinamic arr2 toate elementele cu numere impare (1, 3). Arr2 afișa conținutul matrice.
programul 11.7

Știm că în matrice bidimensional C ++ este o matrice de matrice. Prin urmare, pentru a crea o matrice bidimensională a memoriei dinamice ar trebui alocate într-un ciclu pentru fiecare matrice de intrare care definește numărul de matrice pre-generate. Acesta folosește un pointer la un pointer. cu alte cuvinte, descrierea unui tablou de pointeri:

unde m - numărul de matrice (matrice bidimensională de rânduri).
Un exemplu al problemei. Umple numere aleatoare și elemente de ieșire ale șirului dinamic bidimensional.
programul 11.8

  1. Care este legătura pointerii si matrice?
  2. De ce să folosiți indicii atunci când iterarea matrice este mai eficientă decât utilizarea operațiunilor de tratare a indicelui []?
  3. Care este conceptul de „scurgere de memorie“?
  4. Lista modalitățile avertismente matrice în străinătate?
  5. Ce este un tablou dinamic? De ce matrice C ++ nu este dinamic, în esență?
  6. Descrie procesul dinamic de creare a unei matrice bidimensională
Prezentarea la lecția
teme pentru acasă

Utilizarea matrice dinamice pentru a rezolva următoarea problemă: Având în vedere o matrice O dimensiune N. rescrie un nou număr întreg de matrice B toate numerele chiar și ale șirului original (în aceeași ordine) și pentru a aduce dimensiunea de matrice B și conținutul său.

§62 (10) §40 (11)

literatură

articole similare