std::list 中最小元素的索引

2023-12-25

如果我有一个std::vector<int>,我可以通过减去两个迭代器来获得最小元素的索引:

int min_index = std::min_element(vec.begin(), vec.end()) - vec.begin();

但是,对于没有随机访问迭代器的容器,例如std::list<int>,这行不通。当然,可以做类似的事情

int min_index = std::difference(l.begin(), std::min_element(l.begin(), l.end()));

但随后我必须遍历列表两次。

我可以通过仅在列表中迭代一次来使用 STL 算法获取具有最小值的元素的索引,还是必须编写自己的 for 循环?


您必须编写自己的函数,例如:

template <class ForwardIterator>
  std::size_t min_element_index ( ForwardIterator first, ForwardIterator last )
{
  ForwardIterator lowest = first;
  std::size_t index = 0;
  std::size_t i = 0;
  if (first==last) return index;
  while (++first!=last) {
    ++i;
    if (*first<*lowest) {
      lowest=first;
      index = i;
    }
  }
  return index;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::list 中最小元素的索引 的相关文章

随机推荐