【发布时间】:2016-02-28 14:23:09
【问题描述】:
这可能是一个新问题(我是),但我已经尽可能多地搜索以找到以下问题的解决方案
我有以下场景(当然是重度提炼):
class Container
{
std::vector<Object> obj;
};
class Pointers
{
std::vector<Object*> obj_ptr;
};
我有一个例程将 Object 类型的元素推回容器中的向量 obj,然后将指向同一元素的指针推回 obj_ptr。
总体思路是 obj_ptr[i] == &obj[i] 贯穿程序的整个生命周期。
我遇到的问题是,每当 obj 的容量需要增加时,所有的指针都会失效,使得 obj_ptr 完全没用。我已经使用最大预期大小(大约 10^7)尝试了 obj.reserve() 并使用相同大小初始化向量。问题仍然存在。
不确定它是否重要,但我正在使用 VS 2015 Com。
谢谢!
【问题讨论】:
-
这听起来像是您这边的设计问题/XY 问题。为什么你一开始会想要拥有这样的第二个向量?例如,如果您需要一种方法来迭代其他对象的指针,请实现自定义迭代器。如果要实现一个将对象暴露为指针的接口,请在接口的实现中直接访问向量。
-
嗨塞巴斯蒂安。这是以下问题的提炼版本 本例中的容器是一个 mesh,它具有 points、edges 和 faces 基本上,每个点、边和面都需要知道它属于哪个mesh,以及它的相邻point、edge是哪个, face 元素,以便可以应用某种算法来修改几何形状。所以为了避免重复,只有 mesh 包含 vector
> 、vector和 vector 。对于其他每一种类型,邻接列表都存储在指针向量中。 -
只需使用索引而不是指针,您的问题就会消失。
标签: c++ pointers visual-studio-2015 stdvector