use*_*282 7 c++ iterator stl std listiterator
如果我有一个std::vector<int>,我可以通过减去两个迭代器来获得最小元素的索引:
int min_index = std::min_element(vec.begin(), vec.end()) - vec.begin();
Run Code Online (Sandbox Code Playgroud)
但是,对于没有随机访问迭代器的容器,例如a std::list<int>,这不起作用.当然,有可能做类似的事情
int min_index = std::difference(l.begin(), std::min_element(l.begin(), l.end()));
Run Code Online (Sandbox Code Playgroud)
但是我必须在列表中迭代两次.
我可以通过在列表中迭代一次来获取具有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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7977 次 |
| 最近记录: |