문제

내가 가지고 있다면 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 ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top