【发布时间】:2012-03-30 02:03:09
【问题描述】:
如果我有一个std::vector<int>,我可以通过两个迭代器相减得到最小元素的索引:
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()));
但是我必须遍历列表两次。
我是否可以通过 STL 算法仅通过列表迭代一次来获得具有最小值的元素的索引,还是我必须编写自己的 for 循环?
【问题讨论】:
-
为什么需要
std::list中的元素索引? -
您可以编写一个迭代器来包装
list::iterator并随时跟踪其索引。它的用途有限,因为从容器中插入/删除元素会使存储在迭代器中的索引无效,但您可以在其上使用min_element和其他算法,然后从返回值中获取索引。 -
您可以使用
std::set或对您的容器进行排序,并且始终知道最小元素在哪里... -
如果您想这样做,
list可能是该作业的错误数据结构。 -
@Niklas B. :也许他有他的理由......即这是他必须处理的容器。
标签: c++ stl iterator std listiterator