在给定指向该元素的指针的向量中查找元素的索引

时间:2011-03-03 10:37:09

标签: c++

我有一个结构矢量,如:std::vector<mystruct> elems

如果我有一个mystruct指针,我知道指向elems的一个元素,我怎样才能在elems中得到它的索引}?

2 个答案:

答案 0 :(得分:14)

ptr - &elems[0];

从C ++ 03开始,向量存储必须是连续的,标准中“连续”的定义是&v[n] == &v[0] + n;

[编辑:从相当理论的可移植性的角度来看,请注意允许实现定义SIZE_MAXptrdiff_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来减去指针。