C++11 (*it)first和it->;之间有什么区别;第一?

C++11 (*it)first和it->;之间有什么区别;第一?,c++11,iterator,C++11,Iterator,(*it.first和it->first之间有什么区别 它们是否可以互换使用,例如在下面的代码中? 此外,如果有人有一个好的资源,我可以学习迭代器,这将非常有帮助。特别是关于这行vector::iterator有人能解释一下吗? vector<pair<int, int>> adj[10005]; //For storing vertices, weights of a directed graph as an adjacency list for(int i = 1;

(*it.first
it->first
之间有什么区别

它们是否可以互换使用,例如在下面的代码中? 此外,如果有人有一个好的资源,我可以学习迭代器,这将非常有帮助。特别是关于这行
vector::iterator有人能解释一下吗?

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";
  }
}
向量调整[10005]//为了存储顶点,将有向图的权重作为邻接列表
对于(int i=1;i迭代器的设计使其与指针一样使用。对于指针,
p->expr
(*p)的“速记”。expr
,因此迭代器的设计使
it->expr
(*it)做同样的事情.expr
。如果您只想知道如何使用它们,那么就要知道
it->expr
(*it).expr
是等效的

如果你想知道更多关于引擎盖下的内容,请继续阅读

该标准只是对迭代器的实现方式定义了一些限制和要求,但没有定义实际的类型。对于随机访问迭代器(例如,
std::vector::iterator
)迭代器可以是指针的别名。某些实现,特别是在调试模式下,为迭代器定义一个实际类以进行额外的安全检查。对于非随机访问迭代器,唯一的选项是定义迭代器类

如果它是一个类,那么:

  • (*it)
    将调用
    迭代器::运算符*()
    ,该运算符应返回指向指向对象的引用。然后
    .expr
    只是指向类型的成员访问运算符

  • it->expr
    将调用
    Iterator::operator->()
    ,它将返回指向所指向对象的指针,然后访问
    expr
    成员


技术上有区别。实际上没有区别。至于推荐资源,这不是本网站的主题。好的,这是我刚刚发现的一个很棒的网站