通过指针更新矢量的元素

Updating element of vector via pointer

本文关键字:元素 更新 指针      更新时间:2023-10-16

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

#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...我的指针指向指针是否指向矢量元素的副本?

Box b;
b = **bptr;

你复制到b.

使用 reference(/pointer),您将从 vector 修改元素。

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

演示