c++ - 如何从指向 vector 迭代器的指针中找到索引

标签 c++ 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/

相关文章:

c++ - 参数类型的编译时类型检测

java - LibGDX:如何在不修改原始 vector 的情况下将 vector 与标量相乘? (Java游戏中的简单重力系统)

c++ - 存储反转数据的 vector

c++ - 在 odeint 中使用 std::vector<Eigen::Vector3d> 作为状态类型

c++ - DirectX:渲染到 Texture2DArray,并在计算着色器中从中加载

c++ - 使用数组的模板专门化,std::is_array

c++ - 模板代码中的转发引用与 const 左值引用

C++ 在 Vector 中查找对象成员值

c++ - Opencv Blob 检测和矢量化

c++ - 在 Visual Studio 2010 和 11 之间共享 C++ 解决方案