迭代器在容器中实际指向什么?
what do iterators actually point to in a container?
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
实际上指向什么?
这是实现定义的。 但通常,迭代器是指向容器元素的概念索引/指针。 您必须取消引用迭代器才能访问该元素的内容。
在这种情况下,我将如何遍历容器?
相关文章:
- 提供运算符+或运算符到双向迭代器有什么缺点吗?
- 连续迭代器有什么实际用途吗?
- 当通知迭代器参数初始化为空列表的开头时,list::insert 行为是什么?
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 迭代器在容器中实际指向什么?
- 什么是迭代器
- ActorItr 迭代器变量中有什么,* ActorItr 返回什么?
- 在 C++17 中实现迭代器和const_iterator的正确方法是什么?
- 迭代器和标量对象之间的未定义行为有什么区别吗?
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 随机访问迭代器:我错过了什么?
- 使用 find() 通过 std::set 的迭代器将不起作用。出了什么问题?
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- map<int,int>的*迭代器是什么?它不是pair<int,int>
- 在下面的 C++ 代码中,*(迭代器)和 *(++迭代器)是什么意思?
- BOOST矩阵的迭代器1和迭代器2是什么,以及如何使用
- 使用什么作为 end() 迭代器C++?
- const_iterator<T>和迭代器<常量T>有什么区别?
- 什么时候足以将const_iterator声明为const迭代器
- 初始化迭代器的最佳方法是什么?