【发布时间】:2020-05-27 18:43:56
【问题描述】:
我有两个数组,其中第一个由整数组成,另一个由结构组成,其中一个成员是指向第一个数组中给定元素的指针。
struct A {
...
int *ptr;
};
int arr[100];
vector<A>arr2;
void AddElementAndAssignPointer(int index) {
arr2.push_back({...});
arr2.ptr = &arr[index];
}
现在这种方法的限制是第一个数组的大小是静态的,我希望它是动态的。但是,如果我将其设为 std::vector,则在调整向量大小并将内容复制到更大的数组中时,对该数组中元素的引用将会丢失。
这个问题有哪些可能的解决方案?
编辑:问题是我如何存储对数组元素的引用并同时让它是动态的。
编辑 2:我正在创建一个半边网格结构。第一个数组由网格的顶点组成。第二个阵列由网格的边缘组成。为了稍微简化问题,我需要为每条边设置一个指向顶点的指针。当用户添加新顶点时,顶点数组需要是动态的。
【问题讨论】:
-
你真正想解决什么问题。这可能不是解决方案。
-
这就是您在解决方案中遇到的问题。你为什么要引用数组,你想用你正在构建的这个数据结构做什么?
-
使用
std::list,而不是std::vector。然后你就不用担心失效了。当然,这可能只会掩盖你真正想要解决的问题。 -
@PaulMcKenzie 感谢您的建议!我刚刚添加了关于我的实际问题的评论。你认为
std::list会起作用吗? -
std::list将“工作”,问题是如果您希望std::list与std::vector执行相同的操作,因为它不是随机访问容器。例如,您不能使用[ ]访问元素。相反,您必须使用std::advance来访问相关元素。
标签: c++