【问题标题】:What is the difference between (*it).first and it->first?(*it).first 和 it->first 有什么区别?
【发布时间】:2021-02-20 11:46:18
【问题描述】:

(*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";
  }
}

【问题讨论】:

标签: c++11 iterator


【解决方案1】:

迭代器被设计成可以像指针一样使用。对于指针,p-&gt;expr(*p).expr 的“简写”,所以迭代器的设计使得it-&gt;expr(*it).expr 做同样的事情。如果您只想知道如何使用它们,那么请知道it-&gt;expr(*it).expr 是等价的。

如果您想了解更多内容,请继续阅读。

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

如果是一个类,那么:

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

  • it-&gt;expr 将调用 Iterator::operator-&gt;(),它应该返回一个指向 pointed 对象的指针,然后访问 expr 成员。

Operators in C and C++

operator overloading

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2015-11-10
    • 2018-01-28
    相关资源
    最近更新 更多