假设我有一个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实现不会发生这种情况.
距离(xxx.begin(),theIterator);
以上内容仅适用于vector :: iterator.如果您只有一个指向元素的原始指针,则必须以这种方式使用它:
距离(&v [0],theElementPtr);