将std :: vector元素指针转换为index

时间:2017-10-26 11:36:47

标签: c++ vector

我可以将template<class T> std::size_t get_index(std::vector<T>& vec, T* ptr){ const std::size_t i = ptr - &(*vec.begin()); return i; } 元素指针转换为索引吗?

http://coliru.stacked-crooked.com/a/cedf3d849539e001

.List {
  overflow: hidden;
  max-height: 50px;
}
div {
 display: inline-block;
 }

如果向量中的元素保证是连续的,那么我认为我们可以做这样的指针算法......或者不是吗?

2 个答案:

答案 0 :(得分:2)

矢量元素是连续存储的,是的。您也可以使用std::vector<T>::data()代替&*std::vector<T>::begin()

您可以在以下网址了解详情:http://en.cppreference.com/w/cpp/container/vector

PS:已经存在一个问题 - Are std::vector elements guaranteed to be contiguous?

答案 1 :(得分:2)

  

如果向量中的元素保证是连续的,那么我认为我们可以做这样的指针算法......

向量中的元素保证是连续的,你确实可以使用这样的指针算法。

但是,有一点需要注意:addressof运算符可以重载以返回除地址之外的其他内容。如果您无法保证不会超载,请改用std::addressof

或者只使用Ivan所示的std::vector::data