在我的一个较大的项目中,我遇到了一个问题,即通过指针更新向量的元素。我已经创建了一个更简单的问题演示。
#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 ... 我的指向指针指向矢量元素的副本吗?
答案 0 :(得分:4)