为什么 min_element() 返回最小元素的索引,而不是迭代器?

Why is min_element() returning the index of the minimum element, instead of an iterator?

本文关键字:索引 迭代器 元素 element min 返回 为什么      更新时间:2023-10-16

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;

min_element返回指向元素的迭代器(不一定是指针(。它在这里也是如此。

但是,您没有打印min_element调用的返回值。您首先从中减去迭代器到arr的开头(- arr.begin()(。

减去容器的(随机访问(迭代器(或指向同一数组的指针(会得到一个整数,其值等于迭代器或指针之间的距离。因此,如果将迭代器减去开头,则会得到整数形式的元素索引。

您在调用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;