我可以直接从 C++ 中的向量元素指针获取索引吗?

Umu*_*lli 6 c++ pointers vector

我有一个包含大约 300.000 个对象的大矢量容器。我也有指向这些对象的指针。

是否有使用指针获取向量中对象索引的快速方法?

das*_*ght 5

由于向量是按顺序组织的,您可以通过从指向相关元素的指针中减去指向初始元素的指针来获得索引:

std::vector<MyObject> vect;
MyObject *ptrX = ... // Pointer to element in question
ptrdiff_t index = ptrX - &vect[0];
Run Code Online (Sandbox Code Playgroud)

  • 假设`operator&amp;`不是邪恶的重载。`std::addressof` 解决了这个问题(但不确定它不会为空向量引入 UB ......)。 (3认同)