说我有一个简单的连续数组或向量,其中包含一些T型元素std::vector<T> someVector;我有几个原始指针指向分布在应用程序周围的向量的内部。T* pointerOne = &someVector[5];T* another = &someVector[42];T* evenMore = &someVector[55];但是,向量中的元素有时会在应用程序中四处移动,这会使指针无效(例如:不再指向其应指向的内容):std::swap(someVector[4],someVector[5]); //Oops! pointerOne now essentially points to whatever was in someVector[4], and the correct object that was in someVector[5] has moved places什么是有效的(就性能和内存占用而言,尽管可能并存)系统,以便在数组内容移动时保持这些指针更新?一些注意事项:元素很少切换位置。 num(位置更改)所有T都将始终位于连续数组内。在开发变更的某个时刻,它不会变成其他容器类型,例如地图。我确实知道(并且可以修改)在数组内部移动T的代码部分。实际上,这是在单个函数内发生的。即系统不需要监视内存,只要数组的内容发生更改,系统就可以在运行时自动进行检测。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 如何保留指向指针的反向映射。这可以是原始数组长度中的一个数组(或向量),其中包含指向您创建的指针的指针。例如,在此反向映射的索引5处,您将拥有指向原始数组中指向元素5的所有指针的指针。现在,如果将元素5与元素6交换,只需遍历反向映射中索引5的所有指针,将它们指向原始数组中的元素6,并将所有这些指针移至反向映射的索引6。您可以从代码中移动内容的单个点完成这项工作。 (adsbygoogle = window.adsbygoogle || []).push({});
10-04 23:06
查看更多