-1
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;

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

4

1 回答 1

1

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格式错误,因为 astd::pair本身不是指针或迭代器。

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

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

于 2016-06-05T07:44:18.707 回答