可以安全地使用指向vector元素的指针来确定它在容器中的位置吗?

时间:2015-08-03 00:32:25

标签: c++ pointers vector foreach

我做了一些研究,发现了

  

就像数组一样,向量对其元素使用连续的存储位置,这意味着它们的元素也可以使用常量指向其元素的偏移来访问,并且与数组一样有效。

     

来源:http://www.cplusplus.com/reference/vector/vector/

因此,如果vector保证使用连续存储,那么使用这样的代码是安全的:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> V = { 4, 2, 8, 4, 4, 6 };

    for (auto &i : V)
    {
        cout << i << "(pos " << (&i - &V.front()) << ")" << endl;
    }

    return 0;
}

我是对的还是我做错了假设?代码有效。问题是它是否有效。 foreach非常实用,唯一的问题是获得元素的相对位置。

那么,可以安全地使用指向vector元素的指针来确定它在容器中的位置吗?

1 个答案:

答案 0 :(得分:1)

可能是安全的,但不是很好。结果真正转发了Allocator / Iterator的实现细节。您可以定义自己的分配器,理论上不遵循连续存储。请使用迭代器计算相对位置。