迭代器在容器中实际指向什么?

what do iterators actually point to in a container?

本文关键字:什么 迭代器      更新时间:2023-10-16
set <vector<int> > myset;
vector<int> v1= { 34,634,758,46,64 };
vector<int >v2= {325, 7457, 586, 865};
myset.insert(v1);
myset.insert(v2);
set<vector<int> > ::iterator it;
it = myset.begin();
for (; it != myset.end(); it++)
{
    vector<int> ::const_iterator temp = (*it);
}

我知道(它(指向一个向量,所以如果我写向量 ::const_iterator temp=(*it(,temp 应该指向向量的第一个元素吗? 为什么没有发生这种情况?迭代器在容器中实际指向什么?在这种情况下,我将如何遍历容器?

我知道

(它(指向一个向量

不。 它指的是set的一个元素,而不是该元素中的内容(一个vector(。

所以如果我写vector ::const_iterator temp=(*it)temp应该指向向量的第一个元素?

不。 当您取消引用it 时,您正在访问保存在 set 元素中的vector本身。 您没有访问任何vector 的元素。 为此,您需要使用 vector 自己的方法,例如:

set< vector<int> > myset;
...
set< vector<int> >::iterator it;
for(it = myset.begin(); it != myset.end(); ++it)
{
    vector<int>::const_iterator temp = (*it).begin(); // or: it->begin()
    /* which is the same as doing this:
    vector<int> &v = *it;
    vector<int>::const_iterator temp = v.begin();
    */
}

为什么没有发生这种情况?

因为没有从vector&vector::const_iterator的隐式转换。

容器中的iterator实际上指向什么?

这是实现定义的。 但通常,迭代器是指向容器元素的概念索引/指针。 您必须取消引用迭代器才能访问该元素的内容。

在这种情况下,我将如何遍历容器?