C++ 存储指向动态数组元素的指针

C++ 存储指向动态数组元素的指针,c++,C++,我有两个数组,其中第一个由整数组成,另一个由结构组成,其中一个成员是指向第一个数组中给定元素的指针 struct A { ... int *ptr; }; int arr[100]; vector<A>arr2; void AddElementAndAssignPointer(int index) { arr2.push_back({...}); arr2.ptr = &arr[index]; } 结构A{ ... int*ptr; }; i

我有两个数组,其中第一个由整数组成,另一个由结构组成,其中一个成员是指向第一个数组中给定元素的指针

struct A {
   ...
   int *ptr;
};

int arr[100];
vector<A>arr2;

void AddElementAndAssignPointer(int index) {
    arr2.push_back({...});
    arr2.ptr = &arr[index];
}
结构A{ ... int*ptr; }; int-arr[100]; 矢量2; 无效AddElementAndAssignPointer(整数索引){ arr2.推回({…}); arr2.ptr=&arr[index]; } 现在这种方法的限制是第一个数组的大小是静态的,我希望它是动态的。但是,如果我将它设置为std::vector,那么当调整向量的大小并将内容复制到更大的数组中时,对该数组中元素的引用就会丢失

这个问题的可能解决方案是什么

编辑:问题是如何存储对数组元素的引用并使其同时保持动态


编辑2:我正在创建半边网格结构。第一个数组由网格的顶点组成。第二个阵列由网格的边组成。为了简化问题,我需要为每条边设置指向顶点的指针。当用户添加新的顶点时,顶点数组需要是动态的。

我认为标准的解决方案是,而不是存储实际的指针或任何东西(因为它们可以随着
向量的大小而移动),将对向量的引用和索引的
size\t
存储到向量中。

您实际要解决的问题是什么。这可能不是解决方案,这是你解决方案的问题。为什么要对数组进行引用,您试图对正在构建的数据结构做什么?请使用
std::vector
,而不是
std::list
。那你就不用担心无效了。当然,这可能只会掩盖你真正想解决的问题。@PaulMcKenzie谢谢你的建议!我只是补充了一条关于我的实际问题是什么的评论。你认为
std::list
会起作用吗?
std::list
会“起作用”,问题是如果你希望
std::list
std::vector
一样,因为它不是一个随机访问容器。例如,您不能使用
[]
访问元素。相反,您必须使用
std::advance
来访问所讨论的元素。不幸的是,存储索引不是选项。对于特定的问题,我需要存储指针。另外,存储索引并不是移动指针的好方法。作为向量,它的索引可以与其他内容混合。最好的解决方案是使用
std::list
并向其元素传递迭代器around@LennyWhite设计的哪一部分让你需要一个指针?@TarickWelling那么正确的答案应该是创建一个
struct
,它可以保存向量引用和索引,也许可以使用helper方法。
std::list
还有许多其他问题可能会导致问题,特别是在实践中而不是在理论上;例如,它们对缓存不友好,所以迭代速度很慢。是的,你是对的,链接列表迭代速度不会很快。。。但使用索引方法(或结构)乍一看似乎是一场噩梦。因为对于我的特定问题,我需要在顶点、边和面之间使用多个指针。而且这个数据结构的所有实现都使用指针。