在C++中,如何获取迭代器的int索引?

use*_*r83 6 c++

我需要cout并返回迭代器指向的deque元素索引.如何从迭代器中获取int?

fbr*_*eto 9

您可以使用:

std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));
Run Code Online (Sandbox Code Playgroud)

但请注意这种例程的运行时成本 - 它取决于您使用的数据结构.


Pet*_*ter 7

对于随机访问迭代器,您可以只使用减法:

size_t index = some_iterator - some_deque.begin()
Run Code Online (Sandbox Code Playgroud)

显然,这并不适用于所有迭代器(例如 forstd::list或其他迭代器),但我认为有一定的优雅之处,因为您只能在需要恒定时间时使用此技术。如果您的容器没有随机访问迭代器,那么尝试查找它们的索引很可能是不明智的。


Mat*_*hen 4

std::ptrdiff_t index = std::distance(myDeque.begin(), curIterator);
Run Code Online (Sandbox Code Playgroud)