*   >> Læs Uddannelse artikler >> science >> programming

Principper for en simpel C ++ Sequence Container

hukommelse, anmodningen om det (nye T [noIniCells]) returnerer NULL . Så efter forsøg på at oprette listen, kontrollere dig, hvis markøren er NULL. Hvis det ikke er NULL, du fortsætter med at fylde listen med standardværdierne. Når du tilføjer et element til listen, kan du tjekke, om dynamisk hukommelse var . til rådighed ved at kontrollere, om NULL blev returneret Der er et problem her:.

Når du tilføjer et element ved hjælp af de firkantede parenteser og array pointer set ovenfor, markøren ikke øges Du er nødt til at forøge markøren et antal gange, indtil den peger til den ekstra element, før du kan bruge det til at kontrollere, om den returnerede værdi NULL. Følgende kode illustrerer dette for en int dynamisk array. # include hjælp namespace std; int main () {int * listPtr = ny int [5]; listPtr [0] = 0; listPtr [1] = 1; listPtr [2] = 2; listPtr [3] = 3; listPtr [4] = 4; //tilføje nyt element.

listPtr [5] = 5; ++ listPtr; ++ listPtr; ++ listPtr; ++ listPtr; ++ listPtr; hvis (listPtr == NULL) {cout} --listPtr; --listPtr; --listPtr; --listPtr; --listPtr; tilbage 0; } Du er nødt til at formindske markøren, det samme antal gange, du inkrementeres det. Hvis du ikke formindske, indekset i de firkantede parenteser for markøren ikke længere afspejler deres tilsigtede (original) værdi; under denne betingelse, vil markøren med indekset ikke returnere den korrekte værdi. Læs ovenstående kode, hvis du ikke har gjort det (prøv det).

Der er stadig et problem: Antag at det nye element ikke kunne tilføjes, fordi dens pointer ville pege på en hukommelse stilling, der allerede er taget af en anden genstand ukendt for os. I dette tilfælde, når man tilvækst markøren det antal gange ville det stadig pege på en adresse, der findes som ikke er NULL. I dette tilfælde vil den hvis-kontrollen med NULL fortælle os, at en adresse, der findes, men adressen ville ikke have vores element (og dens værdi). Dette er en forkert konklusion.

En bedre test er som følger: hvis (* listPtr = 5!) {Cout} I if-betingelsen, vi dereference markøren til hukommelsen placeringen af ​​formodede tilføjede objekt, og vi se, om den returnerede værdi er den samme som værdien vi sendte for den ekstra element. I programmet over den værdi, vi sendte var 5. Iterator En pointer er adressen på et objekt i hukommelsen. Vi så et problem over, at når du flytter markøren af ​​array (array navn) foran et antal gange, er du nødt til at flytte det bag det samme antal gange, ellers indekseringen vil gå galt.

Så det er ik

Page   <<  [1] [2] [3] [4] >>
Copyright © 2008 - 2016 Læs Uddannelse artikler,https://uddannelse.nmjjxx.com All rights reserved.