Два итератора переданы как первый и второй аргументы функции std::make_heap
должен быть RandomAccessIterator
s. Итераторами списка не являются RandomAccessIterator
s, а std::vector
и std::array
.
В стандарте это указано в интерфейсе для make_heap
в §25.1:
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 имеем:
If an algorithm’s template parameter is named RandomAccessIterator, RandomAccessIterator1, or RandomAccessIterator2, the template argument shall satisfy the requirements of a random-access iterator
И, наконец, итераторы произвольного доступа являются описано в §24.2.7:
A class or pointer type X satisfies the requirements of a random access iterator if, in addition to satisfying the requirements for bidirectional iterators, the following expressions are valid as shown in Table 111.
Почему вы не включаете сообщения об ошибках? –
Я редактировал вопрос, чтобы включить [SSCCE] (http://sscce.org/), живую демонстрацию и пример ошибки. Если вы чувствуете, что это редактирование неправильно отражает вашу проблему, не стесняйтесь отката. – Shoe