2016-05-23 8 views
-3

In einem meiner größeren Projekte stieß ich auf ein Problem mit dem Aktualisieren von Elementen eines Vektors über Zeiger. Ich habe eine einfachere Demonstration meines Problems erstellt.Aktualisiere Element des Vektors über Zeiger

#include <iostream> 
#include <vector> 

const int LOOKUP = 3; 

struct Box { 
    int use; 
    int cap; 
}; 

void print_vec(std::vector<Box>* bx) { 
    for (Box &b : *bx) { 
     std::cout << "Box: " << b.use << "/" << b.cap << std::endl; 
    }; 
} 

void find_box(std::vector<Box>* bx, Box** bptr) { 
    for (Box &b : *bx) { 
     if (b.use == LOOKUP) { 
      *bptr = &b; 
      return; 
     } 
    } 
} 

int main() { 

    std::vector<Box> boxes = { {1,1}, {2,2}, {3,3}, {4,4}, {5,5} }; 
    std::vector<Box>* bx = &boxes; 

    Box** bptr = new Box *; 
    Box b; 

    print_vec(bx); 

    find_box(bx, bptr); 

    b = **bptr; 

    std::cout << std::endl; 
    std::cout << "Found box w size: " << b.use << std::endl; 
    b.cap = 99; 
    std::cout << "New capacity: " << b.cap << std::endl << std::endl; 

    print_vec(bx); 
} 

Ausgang:

Box: 1/1 
Box: 2/2 
Box: 3/3 
Box: 4/4 
Box: 5/5 

Found box w size: 3 
New capacity: 99 

Box: 1/1 
Box: 2/2 
Box: 3/3 
Box: 4/4 
Box: 5/5 

Meine Vermutung wäre, dass das dritte Feld nach 3/99 lesen würde zu aktualisieren ... meine Ist Zeiger auf Zeiger auf eine Kopie des Vektors Element?

Antwort

4

Mit

Box b; 
b = **bptr; 

Sie tun, um eine Kopie in b.

mit Verweis (/ Zeiger), werden Sie Element aus Vektor ändern.

Box& b = **bptr; 
b.cap = 99; 

Demo

Verwandte Themen