如何解决* it.first和it-> first有什么区别?
(*it).first
和it->first
有什么区别?
它们可以互换使用吗,例如下面的代码?
另外,如果有人拥有丰富的资源可以在其中学习迭代器,那将真的有帮助。具体来说,这行vector<pair<int,int>>:: iterator it;
有人可以解释吗?
vector<pair<int,int>> adj[10005]; //For storing vertices,weights of a directed graph as an adjacency list
for(int i = 1; i <= V; i++)//GOING THROUGH EACH VERTEX
{
vector<pair<int,int>>:: iterator it;
for(it = adj[i].begin(); it != adj[i].end(); it++)
{
cout<<it->first<<" ";
cout<<it->second<<"\n";
}
}
解决方法
迭代器的设计使其可以像指针一样使用。对于指针来说,p->expr
是(*p).expr
的“简写”,因此迭代器的设计使it->expr
的作用与(*it).expr
相同。如果您只想知道如何使用它们,那么知道it->expr
和(*it).expr
是等效的。
如果您想了解更多内幕内容,请继续阅读。
该标准仅定义了如何实现迭代器的一些限制和要求,但没有定义实际的类型。因此,对于随机访问迭代器(例如std::vector<int>::iterator
),迭代器可以是指针的别名。一些实现,尤其是在调试模式下,为迭代器定义了一个实际的类,以进行额外的安全检查。对于非随机访问迭代器,唯一的选择是定义一个迭代器类。
如果这是一堂课,那么:
-
(*it)
将调用Iterator::operator*()
,它应返回对 pointed 对象的引用。然后.expr
只是该指向类型的成员访问运算符。 -
it->expr
将调用Iterator::operator->()
,后者应返回指向指向对象的指针,然后访问expr
成员。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。