11 tömbök és mutatók
Tömbök és mutatók
Az előnyök a mutatókat használva foglalkozó tömb elemeit
Túllépve a határait a tömb
Megjegyzés másik fontos szempont a C-tömbök a C ++. A C ++, nincs betartásának ellenőrzését a kimeneti külföldön C-tömb. Így. felelős betartása feldolgozó elemeket a tömb határain fekszenek teljesen a fejlesztő az algoritmus. Vegyünk egy példát.
programot 11.4
A program hozza a következőket:
11.4 A program szándékosan hibázik. De a fordító nem hiba bejelentéséhez: array bejelentette az öt elem és ciklusok azt jelentette, hogy az elemek 10! Ennek eredményeként a jogot, hogy inicializálni csak öt elem (az adatok megsérülhetnek), ők is együtt jelenik meg a „szemetet”. C ++ lehetővé teszi, hogy ellenőrizzék a határokat segítségével könyvtári funkciót (meg kell adni a header file iterator) begin () és end (). Mi módosítja a programot 11.4
programot 11.5
begin () és vége () függvény bejáró. A koncepció a iterátorokat fogjuk feltárni később, de most tegyük fel, hogy úgy viselkednek, mint egy mutatót az első elemet (első) és az elem az utolsó (utolsó). A programban 11,5 mi, a tömörség és a kényelem, helyébe a for ciklus a while (mivel a számláló van itt nem szükséges - az általunk használt mutató aritmetika). Két mutatóval is könnyen megfogalmazni a feltétele, hogy kilépne a hurok, mivel minden egyes iteráció a hurok indexet növeljük először.
Egy másik módja, hogy egy kis kitérőt a tömb elemeinek biztonságosabb kérelem alapján a tartomány alapú ciklusra vonatkozóan. szóltunk a téma ciklusban az opciót (lásd. 9.3 program)
Operations új és törlése
Addig a pillanatig ismeretségét mutató akkor már ismert az egyetlen módja, hogy rögzítse a változó adatok a memóriában a változókat. Változó - a megnevezett hely a memóriában. emlékeket adott változók kiosztása idején kezdetét a program, és használni, amíg megszűnik működni. Alapján pointerek segítségével lehet létrehozni nevezett memória blokkok egy bizonyos típusa és mérete (valamint, hogy engedje őket) működése során a program. Ez mutatja a figyelemre méltó tulajdonsága mutatók, a legtöbb teljesen feltárt az objektum-orientált programozás létrehozásakor osztályok.
Memória dinamikus végezzük a műveletet új. szintaxis:
Elvégzése után a műveletet a kiválasztott memória szükséges a szabad (visszatérő elérhetővé teszi más adatok) a delete. Felett a kiadások memória - fontos szempont az alkalmazás fejlesztés. Hibák memória nem szabadul, vezet a „memória szivárgás”, ami viszont okozhat a program összeomlik. törlése művelet lehet alkalmazni, hogy a nulla mutató (nullptr) vagy létrehozott egy új (azaz. a. új és törlési párban használják).
dinamikus tömbök
A dinamikus tömb - egy tömb, amelynek mérete határozza során a program. Szigorúan véve a C-tömb nem dinamikus C ++. Ez azt jelenti, csak a méret a tömb lehet meghatározni, és a mérete a tömb változás a program során, továbbra is lehetetlen. Egy tömb a kívánt méretet szükséges memóriát az új tömb, és másolja az adatokat az eredeti, majd felszabadítja a memóriát korábban kiosztott az eredeti tömb. Egy igazán dinamikus tömb C ++ a vektor típusától. amely később látni fogjuk. Elkülöníteni a memória tömböt használjuk működés közben az új. Szintaxis kiosztása memória a tömb formájában:
pointer = új típusú [size]. Például:
Felszabadítva elő a delete operátor:
Ebben az esetben a tömb mérete nincs megadva.
Mintaprogram. Töltsük dinamikus tömbök egész arr1 véletlen számokat. Itt található az eredeti tömb. Átírása új, dinamikus tömbök egész arr2 minden olyan elem, páratlan számok (1, 3). Arr2 megjeleníti a tartalmát a tömb.
programot 11.7
Tudjuk, hogy a C ++ kétdimenziós tömb egy tömb tömbök. Ezért, hogy hozzon létre egy két dimenziós tömb dinamikus memória kell elosztani a ciklus minden egyes beérkező tömb számát meghatározó előre generált tömbök. Ez használ egy mutató a mutató. Más szóval, a leírás egy sor mutató:
ahol m - a tömbök számának (kétdimenziós tömb sorok).
Egy példa a probléma. Töltsük véletlen számokat és a hajtott elemeket a kétdimenziós dinamikus tömb.
programot 11.8
- Mi a kapcsolat a mutatók és tömbök?
- Miért érdemes pointerek amikor ismételve a tömb hatékonyabb, mint az index kezelési műveleteket []?
- Mi a „memóriavesztés”?
- Sorolja fel a kiút figyelmeztetések külföldön tömb?
- Mi az a dinamikus tömb? Miért C ++ tömb nem dinamikus lényegében?
- Ismertesse a dinamikus létrehozásának folyamatát egy kétdimenziós tömböt
Előadás a leckét
házi feladat
A dinamikus tömbök megoldani a következő problémát: Adott egy tömb N. mérete átírni egy új integer tömb B minden páros számok az eredeti tömb (ugyanabban a sorrendben), és hogy a méret a B tömb és annak tartalmát.
§62 (10) §40 (11)