如下代码:

std::list<int> list;
std::make_heap(list.begin(), list.end());

Live demo

导致很多错误,包括:



当我将list声明为std::vector时,我没有得到这些错误,为什么?

最佳答案

作为函数的std::make_heap的第一个和第二个参数传递的两个迭代器必须是RandomAccessIterator。列表迭代器不是RandomAccessIterator,而std::vectorstd::array是。

在标准中,这是在§25.1的make_heap接口(interface)中指定的:

template<class RandomAccessIterator>
  void make_heap(RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
  void make_heap(RandomAccessIterator first, RandomAccessIterator last,
                 Compare comp);

在§25.1.5.5中,我们有:



最后,第24.2.7节描述了随机访问迭代器:

07-26 09:29