我有一个结构矢量,如:std::vector<mystruct> elems
。
如果我有一个mystruct
指针,我知道指向elems
的一个元素,我怎样才能在elems
中得到它的索引}?
答案 0 :(得分:14)
ptr - &elems[0];
从C ++ 03开始,向量存储必须是连续的,标准中“连续”的定义是&v[n] == &v[0] + n;
[编辑:从相当理论的可移植性的角度来看,请注意允许实现定义SIZE_MAX
和ptrdiff_t
,以便可以使用未定义的结果减去同一对象中的两个指针。你希望没有任何实现可以安排实际导致问题,但你永远不会知道。实现避免相当容易 - 只是不要返回大的分配
答案 1 :(得分:3)
元素必须连续存储。因此:
mystruct * elem; // definitely within the vector
mystruct * first = &elems[0];
std::vector<mystruct>::size_type index = elem - first;
技术上应该使用ptrdiff_t
而不是size_type
来减去指针。