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

时间:2018-08-08 15:38:07

标签: c++ stl

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);

}

我知道(it)指向矢量,所以如果我写vector :: const_iterator temp =(* it),temp应该指向矢量的第一个元素? 为什么这没有发生?迭代器实际上指向容器中的什么?在这种情况下我将如何穿越集装箱?

1 个答案:

答案 0 :(得分:1)

  

我知道它指向一个向量

不。它是指set的元素,而不是该元素中包含的内容(vector)。

  

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

不。取消引用it时,您将访问vector元素中保存的set本身。您没有访问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实际上指向容器中的什么?

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

  

在这种情况下我将如何穿越集装箱?