获取给定其地址的std :: vector元素的索引

lez*_*lon 9 c++ stl stdvector

假设我有一个std :: vector,我通过某种方式获得了第n个元素的地址.给定我的std :: vector的基地址,是否有一种简单的方法(比迭代迭代更快)来获得元素出现的索引?让我们假设我确定元素在向量中.

K-b*_*llo 17

既然你知道元素在向量中,并且向量保证它的存储是连续的,你可以这样做:

index = element_pointer - vector.data();
Run Code Online (Sandbox Code Playgroud)

要么

index = element_pointer - &vector[0];
Run Code Online (Sandbox Code Playgroud)

请注意,从技术上讲,连续保证是在C++ 03中引入的,但我还没有听说过C++ 98实现不会发生这种情况.

  • @Adrian,C++ 98并不能完全保证所有向量的元素都将驻留在连续的内存中.实际上,它在所有C++版本中都是安全的,但它只能通过以后的标准修订来保证. (2认同)

Way*_*ner 5

距离(xxx.begin(),theIterator);

以上内容仅适用于vector :: iterator.如果您只有一个指向元素的原始指针,则必须以这种方式使用它:

距离(&v [0],theElementPtr);

  • 指针和迭代器之间有区别,他指定了一个迭代器.如果他可以重构,这是一个很好的建议. (3认同)