微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

* it.first和it-> first有什么区别?

如何解决* it.first和it-> first有什么区别?

(*it).firstit->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成员。

Operators in C and C++

operator overloading

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。