*Iter.First 和 Iter->First 有什么区别?


vector<int> a = { 1,2,3,4,5,6,7 };
pair<vector<int>, vector<int>::iterator> pair_of_itr;    //not working showing wrong directional error!
auto pair_of_itr = minmax_element(a.begin(), a.end());
cout << *pair_of_itr.first << " " << *pair_of_itr.second << endl;  // working with auto  but not with the PAIR of iterator.
//cout << pair_of_itr->first << " " << pair_of_itr->second << endl  // not working
return 0;

在这里,我已经通过评论进行了解释。 请参考评论。

a->b

(*a).b相同。*a.b*(a.b)相同。因此,它们在取消引用a或取消引用a.b方面有所不同。

在您的情况下,auto pair_of_itr = std::minmax_element ...会创建一个迭代器std::pair,并且它是您要取消引用的迭代器。所以那将是*pair_of_itr.first.*pair_of_itr格式不正确,因为std::pair本身不是指针或迭代器。

pair<vector<int>, vector<int>::iterator> pair_of_itr;的问题只是货币对的第一个元素是std::vector,而不是std::vector::iterator。因此,在这种情况下,pair_of_itrpair_of_itr.first都不能取消引用。*pair_of_itr.second会编译,因为第二个元素是一个迭代器。

添加多余的括号通常是一个好主意,特别是如果您需要询问它们是否必要。其他人可能也不记得*a.b的意思是*(a.b),括号也不花很多钱。

最新更新