我做了一些研究,发现了
就像数组一样,向量对其元素使用连续的存储位置,这意味着它们的元素也可以使用常量指向其元素的偏移来访问,并且与数组一样有效。
因此,如果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元素的指针来确定它在容器中的位置吗?
答案 0 :(得分:1)
可能是安全的,但不是很好。结果真正转发了Allocator / Iterator的实现细节。您可以定义自己的分配器,理论上不遵循连续存储。请使用迭代器计算相对位置。