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

C++ 在C++;,如何获取迭代器的int索引?,c++,C++,我需要cout并返回迭代器指向的deque元素的索引。如何从迭代器中获取int?您可以使用: std::ptrdiff_t index = std::distance(myDeque.begin(), curIterator); std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator)); 但是,请注意这样一个例程的运行时成本-这取决于您使用的数据结构。对于随机访问迭代器,您可以使用减法: size_t ind

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

您可以使用:

std::ptrdiff_t index = std::distance(myDeque.begin(), curIterator);
std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));

但是,请注意这样一个例程的运行时成本-这取决于您使用的数据结构。

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

size_t index = some_iterator - some_deque.begin()

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

在提供的两种方法中:

std::ptrdiff_t index(std::distance(my_container.begin(), my_iterator));


。。。后者的优点是只适用于随机访问迭代器——因此,当替换另一个容器时,您不会意外地得到一个昂贵的操作(例如,对于列表为O(n))。

为什么需要索引?你就不能取消对对象的引用并对其进行迭代器运算吗?怎么会这样?取消对迭代器的引用不就像取消对指针的引用并给我内存地址,而不是deque中的位置吗?或者更确切地说,它取决于迭代器的类(随机、向前等)。我假设通过容器中的每个元素来查找数字的距离步数,因此对于大型deque,运行时成本将是巨大的。但是,我的deque应该不超过10个元素。距离是否返回整数?index()调用的作用是什么?如果您的deque中不应该包含超过10个元素,那么我认为您应该使用
vector
,或者至少有一个很好的理由坚持使用deque。index()“call”只是一个名为
index
的变量,由
std::distance
的返回值构造而成。deque使用随机访问迭代器,因此迭代比将deque从第一个遍历到索引要快。乔治:从技术上讲,distance返回迭代器的
差异类型
,这可以归结为一个
ptrdiff\u t
。这是一个整数,但不一定是字面意义上的
int
——例如,在MSVC++64位版本中,
int
是32位,但
ptrdiff\u t
是64位。我想我会投票认为这是简单和优雅的最佳答案。我是否可以将结果分配给int以将其强制转换为int?您可以将其分配给int,但您可能会收到更高级别的编译器警告(无符号->有符号转换或类型的实际缩短,具体取决于编译器等)。必须显式转换为int有点烦人,但这不会隐藏问题,除非您的deque中有超过20亿个元素——我想您肯定不会:)
std::ptrdiff_t index = some_iterator - some_deque.begin()