簡體   English   中英

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

[英]Index of minimum element in a std::list

如果我有一個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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM