为啥 min_element() 返回最小元素的索引,而不是迭代器?
Posted
技术标签:
【中文标题】为啥 min_element() 返回最小元素的索引,而不是迭代器?【英文标题】:Why is min_element() returning the index of the minimum element, instead of an iterator?为什么 min_element() 返回最小元素的索引,而不是迭代器? 【发布时间】:2019-12-31 15:06:39 【问题描述】:min_element()
应该返回一个指向数组或向量中最小元素的指针,但这里它返回的是具有最小值的元素的位置。为什么会这样?
抱歉这个愚蠢的问题,我是初学者。
int n; cin>>n;
vector<int> arr(n);
for(int i=0;i<n;i++)
cin>>arr[i];
int minElementIndex = min_element(arr.begin(),arr.end()) - arr.begin();
cout<<minElementIndex;
【问题讨论】:
为什么它返回元素的位置最小值 -- 它没有这样做。更仔细地看线。除了打电话给std::min_element
,还有更多事情要做
你认为从min_element()
给出的迭代器中减去arr.begin()
会怎样?
只是想说,这个问题不应该被否决——虽然它是一个简单的错误,但问题的形成得体并且具有最低限度的可重现代码sn- p.
【参考方案1】:
min_element
返回一个指向元素的迭代器(不一定是指针)。这里也是如此。
但是您没有打印min_element
调用的返回值。您首先要从中减去 arr
开头的迭代器 (- arr.begin()
)。
减去(随机访问)容器的迭代器(或指向同一数组的指针)会产生一个整数,其值等于迭代器或指针之间的距离。所以如果你在开头减去一个迭代器,你会得到元素的索引为整数。
【讨论】:
【参考方案2】:在对min_element
的调用中,您正在从另一个指针中减去一个指针。不如试试这种方法:
int index;
int n; cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++)
cin >> arr[i];
int minElementValue = *std::min_element(arr.begin(), arr.end());
for (int i = 0; i < n; i++)
if (arr[i] == minElementValue)
index = i;
cout << minElementValue << ":" ;
cout << " " << index;
【讨论】:
以上是关于为啥 min_element() 返回最小元素的索引,而不是迭代器?的主要内容,如果未能解决你的问题,请参考以下文章