質問

std::vector<int>を持っている場合は、2つのイテレータを減算することによって最小要素のインデックスを取得できます。

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()));
.

しかし、私はリストを2回繰り返す必要があります。

リストを1回繰り返すだけで、STLアルゴリズムで最小値を持つ要素のインデックスを取得できます。

役に立ちましたか?

解決

あなたはあなた自身の機能を書かなければなりません、例えば:

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