<分区>
我有一个指向 vector 迭代器的指针;我不知道 vector 是什么。因此 it - vec.begin()
和 std::distance(vec.begin(), it)
没用,因为我不知道 vector 是什么vec
是。我开始知道 it - vec.begin()
是一个常数时间算法。所以我认为索引的数值肯定作为某个私有(private)成员存储在 vector 迭代器中。如何在不知道迭代器 vector 的情况下找到索引?
<分区>
我有一个指向 vector 迭代器的指针;我不知道 vector 是什么。因此 it - vec.begin()
和 std::distance(vec.begin(), it)
没用,因为我不知道 vector 是什么vec
是。我开始知道 it - vec.begin()
是一个常数时间算法。所以我认为索引的数值肯定作为某个私有(private)成员存储在 vector 迭代器中。如何在不知道迭代器 vector 的情况下找到索引?
最佳答案
看到这个问题: Converting a vector to an array - Is there a 'standard' way to do this?
标准要求 vector 按顺序存储它们的元素( bool vector 除外)。这意味着迭代器不需要在 vector 中存储数据的索引,只需要一个指向其在 vector 中分配的元素的指针。您可以使用 it - vec.begin()
获取索引的原因是您正在比较一个元素 vector 的两个不同地址,这些元素的地址保证是连续的。 “vec.begin()”只是一个引用点。
这就是为什么您基本上可以通过使用&theVector[0]
来获取 vector 中的“数组”,因为只要保证几个变量具有连续的地址分配,这就与一个完全相同的数组。
关于c++ - 如何从指向 vector 迭代器的指针中找到索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38910540/