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_itr
和pair_of_itr.first
都不能取消引用。*pair_of_itr.second
会编译,因为第二个元素是一个迭代器。
添加多余的括号通常是一个好主意,特别是如果您需要询问它们是否必要。其他人可能也不记得*a.b
的意思是*(a.b)
,括号也不花很多钱。