我想知道是否有可能通过仅访问容器内部的对象(例如
或者
但在第一个示例中,我们很可能会按顺序遍历容器,而在第二个示例中,我们知道我们需要的对象的索引。我想知道是否可以在不知道对象在容器中的索引的情况下获得对该对象的迭代器,但如果我们确实有对它的引用或指针,则如上所述。
这个问题似乎已经被问过了,见这里,但似乎更像是OP希望别人修复他的代码,而不是回答一般性问题,因此答案在我看来并不令人满意。此外,这里的答案似乎表明我们可以使用构造函数初始化迭代器,如下所示。
std :: vector <...>
)来获得一个迭代器, 例如通过引用(这意味着我们可以使用&
运算符访问其指针)。例如,通常我们声明一个迭代器为std::vector<int>::iterator = vec.begin();
或者
std::vector<int>::iterator = next(vec.begin(), idx);
但在第一个示例中,我们很可能会按顺序遍历容器,而在第二个示例中,我们知道我们需要的对象的索引。我想知道是否可以在不知道对象在容器中的索引的情况下获得对该对象的迭代器,但如果我们确实有对它的引用或指针,则如上所述。
这个问题似乎已经被问过了,见这里,但似乎更像是OP希望别人修复他的代码,而不是回答一般性问题,因此答案在我看来并不令人满意。此外,这里的答案似乎表明我们可以使用构造函数初始化迭代器,如下所示。
std::vector<int>::iterator it(...);
但我在官方文档中没有找到std :: iterator类的构造函数证据(我也没有找到有关std :: vector< ... > :: iterator的文档),因此即使它编译通过,我仍然不敢使用上面显示的构造函数。
注意
我以上使用std :: vector
作为示例,但理想情况下,我希望这适用于任何容器,例如std :: list
或std :: deque
。
vec.begin()+(pos-&vec[0])
- Marc Glisse