如下代码:
std::list<int> list;
std::make_heap(list.begin(), list.end());
Live demo
导致很多错误,包括:
当我将
list
声明为std::vector
时,我没有得到这些错误,为什么? 最佳答案
作为函数的std::make_heap
的第一个和第二个参数传递的两个迭代器必须是RandomAccessIterator
。列表迭代器不是RandomAccessIterator
,而std::vector
和std::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节描述了随机访问迭代器: