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;
这里我通过评论解释。请参阅评论。
答案 0 :(得分: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
格式错误,因为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)
,并且括号不会花费太多。