Domanda

Se ho un std::vector<int>, posso ottenere l'indice dell'elemento minimo sottraendo due iteratori:

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

Tuttavia, con contenitori che non hanno iteratori di accesso casuali, ad esempio un std::list<int>, questo non funziona.Certo, è possibile fare qualcosa come

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

Ma poi devo iterare due volte attraverso la lista.

Posso ottenere l'indice dell'elemento con il valore minimo con gli algoritmi STL solo in itrating una volta attraverso l'elenco o devo codificare il mio per-loop?

È stato utile?

Soluzione

Dovrai scrivere la tua funzione, ad esempio:

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;
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top