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应该指向矢量的第一个元素? 为什么这没有发生?迭代器实际上指向容器中的什么?在这种情况下我将如何穿越集装箱?
答案 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
实际上指向容器中的什么?
这是实现定义的。但总的来说,迭代器是容器元素的概念性索引/指针。您必须取消引用迭代器才能访问该元素的内容。
在这种情况下我将如何穿越集装箱?