C++11 什么';iter.first和iter->;第一? 向量a={1,2,3,4,5,6,7}; itr的配对//不工作显示错误的方向错误! _itr=minmax_元素的自动配对(a.begin(),a.end()); cout

C++11 什么';iter.first和iter->;第一? 向量a={1,2,3,4,5,6,7}; itr的配对//不工作显示错误的方向错误! _itr=minmax_元素的自动配对(a.begin(),a.end()); cout,c++11,stl,minmax,C++11,Stl,Minmax,a->b与(*a).b相同*a.b与*(a.b)相同。因此,它们在a是取消引用还是a.b是取消引用方面有所不同 在您的例子中,auto pair\u of_itr=std::minmax\u元素…创建了一个迭代器的std::pair,它就是您要取消引用的迭代器。所以这将是第一对itr*itr的pair格式不正确,因为std::pair本身不是指针或迭代器 itr的对的问题简单地说,该对的第一个元素是std::vector,而不是std::vector::iterator。因此,在这种情况下,对i

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

在您的例子中,
auto pair\u of_itr=std::minmax\u元素…
创建了一个迭代器的
std::pair
,它就是您要取消引用的迭代器。所以这将是第一对itr
*itr的pair格式不正确,因为
std::pair本身不是指针或迭代器

itr的
对的问题
简单地说,该对的第一个元素是
std::vector
,而不是
std::vector::iterator
。因此,在这种情况下,
对itr
对itr.first
都不能取消引用<代码>*第二个元素的一对将被编译,因为第二个元素是迭代器


添加多余的括号通常是一个好主意,特别是当您需要询问是否有必要时。其他人也可能不记得,
*a.b
的意思是
*(a.b)
,括号的价格也不高。

你看过itr的“对”类型了吗;这不是两个迭代器,而是一个向量和一个迭代器。@marshall:是的,正如我所说:“这对中的第一个元素是std::vector,不是std::vector::iterator。”这不是一个足够清楚的语句吗?不,很清楚;我只是在第二段错过了它;很抱歉
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;