您可以使用:
std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));
Run Code Online (Sandbox Code Playgroud)
但请注意这种例程的运行时成本 - 它取决于您使用的数据结构.
对于随机访问迭代器,您可以只使用减法:
size_t index = some_iterator - some_deque.begin()
Run Code Online (Sandbox Code Playgroud)
显然,这并不适用于所有迭代器(例如 forstd::list或其他迭代器),但我认为有一定的优雅之处,因为您只能在需要恒定时间时使用此技术。如果您的容器没有随机访问迭代器,那么尝试查找它们的索引很可能是不明智的。
std::ptrdiff_t index = std::distance(myDeque.begin(), curIterator);
Run Code Online (Sandbox Code Playgroud)