通过指针更新向量的元素

时间:2016-05-23 21:41:24

标签: c++ pointers vector

在我的一个较大的项目中,我遇到了一个问题,即通过指针更新向量的元素。我已经创建了一个更简单的问题演示。

#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);
}

输出:

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

我的假设是更新后的第三个框会读到3/99 ... 我的指向指针指向矢量元素的副本吗?

1 个答案:

答案 0 :(得分:4)

使用

Box b;
b = **bptr;

您复制到b

使用引用(/ pointer),您将修改vector中的元素。

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

Demo