通过指针更新矢量的元素
Updating element of vector via pointer
在我的一个大型项目中,我遇到了一个通过指针更新矢量元素的问题。我创建了一个更简单的问题演示。
#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;
演示
相关文章:
- 更新的矢量元素不打印
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 为什么在功能内擦除元素后不列出更新?
- 在删除之前更新一组元素指针中的元素
- 为什么我的矢量不随我对其元素所做的更改而更新
- 如何在C++中从一个向量元素减去std::unorderede_map向量元素并更新它
- 在函数中删除第一个元素后,如何更新链接列表的phead
- 插入新元素时结束迭代器会获得更新
- 更新模型/视图方案中 QXXXView (QTableView, QTreeView,..) 元素的显示工具提示
- 删除和更新矢量<struct>中的特定元素
- 如何更新std :: Priority_queue中的元素
- 如何更新最近在 std::vector<pair<int, int>> 中输入的元素?
- 对一个具有重复元素的数组进行排序时更新并行数组
- 通过指针更新矢量的元素
- 正在更新微小Xml元素中的数据
- 如何更新映射C++中元素的值
- 为向量成员和更新元素指定默认值
- 如何在ListModel中添加元素后更新QML ListView
- 不使用 if 插入/更新 std::unordered_map 元素的最快方法是什么