STD :: Listの最小要素のインデックス
-
13-12-2019 - |
質問
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;
}
. 所属していません StackOverflow