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

时间:2010-06-01 21:40:14

标签: c++

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

4 个答案:

答案 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))。