我需要cout并返回迭代器指向的deque元素索引。如何从迭代器中获取int?
答案 0 :(得分:9)
您可以使用:
std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));
请注意此例程的运行时成本,但这取决于您使用的数据结构。
答案 1 :(得分:4)
对于随机访问迭代器,您只需使用减法:
size_t index = some_iterator - some_deque.begin()
显然这不适用于所有迭代器(例如,std::list
或其他任何东西),但我认为它有一定的优雅,因为你只能花费不变的时间才能使用这种技术。如果你的容器没有随机访问迭代器,那么无论如何都试图找到它们的索引是非常明智的。
答案 2 :(得分:3)
std::ptrdiff_t index = std::distance(myDeque.begin(), curIterator);
答案 3 :(得分:2)
在两种呈现的方法中:
std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));
和
std::ptrdiff_t index = some_iterator - some_deque.begin()
...后者具有仅适用于随机访问迭代器的优势 - 因此当替换另一个容器时,您不会意外地获得昂贵的操作(例如,列表的O(n))。