【发布时间】:2014-06-26 04:56:46
【问题描述】:
这个问题可能是不言自明的,但是如果我有一个std::list<T> 对象,是否有任何标准方法来获取一个元素的迭代器,给定一个指向该元素的T* 值?
如果T 是用户定义的类型,似乎取消引用指针并使用find_if 可以完成这项工作,但这对我来说似乎效率低下。如果您尝试按值在容器中查找元素,那么您需要遍历容器直到找到某些内容是有道理的。但是如果你有一个指针,直觉上感觉应该有一个更直接的方法。我的基本理解使我认为列表项的迭代器和它的指针之间应该有一些一对一的关系,因为列表在 STL 中是双向链接的,但我真的没有太多支持这一点。
我对 C++ 迭代器不是很熟悉,所以如果有人能解释为什么有或没有办法做到这一点,那将会很有帮助。
编辑: Potatoswatter 提供了一个很好的 C++11 解决方案,但如果有任何 C++03 兼容的解决方案可用,我仍然很感兴趣。
【问题讨论】:
-
我不明白这个问题 - 你是在问如何在列表中找到一个元素,给定一个指向要找到的元素的指针?
-
std::list<T>持有T类型的对象。给定一个std::list<T>::iterator,您可以获得对该对象的引用,您可以使用它来获取该对象的地址。但是,指针将不知道它指向的对象在std::list中的位置。