*   >> Lezen Onderwijs artikelen >> science >> programming

Principes van een eenvoudige C ++ Sequence Container

e eerste lijst voor de hierboven aannemer: T * listPtr = new T [noIniCells]; if (! listPtr = NULL) {voor (int i = 0; i {listPtr [i] = defaultObj;}} else {cout} Als er geen dynamisch geheugen, het verzoek om deze (nieuwe T [noIniCells]) geeft NULL . Dus na een poging om de lijst te maken, u controleren of de wijzer is NULL. Als het niet NULL, ga je door naar de lijst met de standaardwaarden in te vullen. Als u een element toe te voegen aan de lijst, kunt u controleren of dynamisch geheugen was . beschikbaar door te controleren als NULL was teruggekeerd Er is hier een probleem.

Wanneer u een element met behulp van de vierkante haken en de vele pointer zoals hierboven te zien, de pointer wordt niet verhoogd toe Je moet de pointer verhogen een aantal keren totdat het wijst om de toegevoegde element, voordat je kunt het gebruiken om te controleren of de geretourneerde waarde is NULL. De volgende code illustreert dit voor een int dynamische array. #include using namespace std; int main () {int * listPtr = new int [5]; listPtr [0] = 0; listPtr [1] = 1; listPtr [2] = 2; listPtr [3] = 3; listPtr [4] = 4; //nieuw element toe te voegen.

listPtr [5] = 5; ++ listPtr; ++ listPtr; ++ listPtr; ++ listPtr; ++ listPtr; if (listPtr == NULL) {cout} --listPtr; --listPtr; --listPtr; --listPtr; --listPtr; 0 terug; } Je moet de pointer, hetzelfde aantal keren dat je het opgehoogd verlagen. Als je niet verlagen, de index in de vierkante haken voor de wijzer zullen hun beoogde (oorspronkelijke) waarde niet meer weer te geven; onder die voorwaarde zal de pointer met de index niet de juiste waarde terug te keren. Lees de bovenstaande code als u dat nog niet hebt gedaan (te proberen).

Er is nog een probleem: Neem aan dat het nieuwe element niet kon worden toegevoegd omdat de pointer wijst naar een geheugenplaats die reeds door een ander object niet kennen. In dat geval bij het verhogen van de aanwijzer het aantal keren zou het nog steeds op een adres dat bestaan ​​die niet NULL. In dit geval zal de if-check met NULL ons te vertellen dat een adres bestaat, maar het adres niet zou hebben ons element (en de waarde). Dit is een verkeerde conclusie.

Een betere test is als volgt: if (* listPtr = 5!) {Cout} In de if-toestand, we dereferentie de pointer naar de geheugenpositie van de veronderstelde toegevoegde object en we of de geretourneerde waarde gelijk aan de waarde stuurden we voor de toegevoegde element. In het programma boven de waarde die we gestuurd was 5. Iterator Een pointer is he

Page   <<  [1] [2] [3] [4] >>
Copyright © 2008 - 2016 Lezen Onderwijs artikelen,https://onderwijs.nmjjxx.com All rights reserved.