7

がある場合std::vector<int>、2 つの反復子を減算することで最小要素のインデックスを取得できます。

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

ただし、 a などのランダム アクセス イテレータを持たないコンテナではstd::list<int>、これは機能しません。確かに、次のようなことは可能です

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

しかし、リストを2回反復する必要があります。

リストを 1 回反復するだけで、STL アルゴリズムを使用して最小値を持つ要素のインデックスを取得できますか?それとも独自の for ループをコーディングする必要がありますか?

4

1 に答える 1

1

たとえば、次のように独自の関数を作成する必要があります。

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;
}
于 2012-03-13T17:03:11.143 に答える