В cocos2d-x v3.x boundingBox
устарело в классе Node (то есть суперкласс Sprite ). Вместо этого используйте следующий код:
auto spriteWidth = sprite->getTextureRect().size.width;
auto spriteHeight = sprite->getTextureRect().size.height;
или
auto spriteWidth = sprite->getContentSize().width;
auto spriteHeight = sprite->getContentSize().height;
Если вы хотите создать очередь приоритетов из списка, то вы можете использовать make_heap:
Внутри куча - это дерево, в котором каждый узел ссылается на значения не больше чем его собственная ценность. В кучах сгенерировано по make_heap, конкретная позиция элемент в дереве, а не определяется потреблением памяти ссылок определяется его абсолютным позиция в последовательности, где * первая всегда быть высшей ценностью в куча.
Кучи позволяют добавлять или удалять элементы от него в логарифмическом времени с помощью функции push_heap и pop_heap, которые сохраняют его свойства кучи.
You are supposed to use std::make_heap()
along with std::push_heap()
and std::pop_heap()
to maintain a binary heap on top of a vector or array; the latter two functions maintain the heap invariant. You can also use std::heap_sort()
to sort such a heap. While it is true that you could use std::priority_queue
for a priority queue, it doesn't let you get at the insides of it, which perhaps you want to do. Also, std::make_heap()
and std::heap_sort()
together make a very simple way of doing heapsort in C++.
На ваш прямой вопрос хорошо бы ответил класс алгоритмов и структур данных. Кучи повсеместно используются в алгоритмах информатики. Процитируем приведенную ниже функцию make_heap: «Куча - это дерево, в котором каждый узел ссылается на значения, не превышающие его собственное значение». Хотя существует множество приложений для кучи, то, которое я использую чаще всего, связано с проблемами поиска, когда вы хотите эффективно отслеживать отсортированный список из N значений.
У меня было такое же замешательство, как и у вас, когда я впервые столкнулся с функциями кучи STL. Однако мой вопрос был немного другим. Я задавался вопросом: «Почему куча STL не находится в том же классе структур данных, что и std :: vector?» Я думал, что должно работать так:
std::heap< int > my_heap;
my_heap.heap_insert( 7 );
my_heap.heap_insert( 3 );
Идея, лежащая в основе функций кучи STL, заключается в том, что они позволяют создавать структуру данных кучи из нескольких различных базовых контейнеров STL, включая std :: vector. Это может быть действительно полезно, если вы хотите передать контейнер для использования где-нибудь в ваших программах. Это также немного приятно, потому что вы можете выбрать базовый контейнер своей кучи, если вы решите использовать что-то другое, кроме std :: vector. Все, что вам действительно нужно, это следующее:
template <class RandomAccessIterator>
void make_heap ( RandomAccessIterator first, RandomAccessIterator last );
Это означает, что вы можете сделать множество разных контейнеров в кучу. Компаратор также является необязательным в сигнатуре метода, вы можете узнать больше о различных вещах, которые вы можете попробовать на страницах STL для функции make_heap.
Ссылки:
Существует два основных способа создания [двоичного файла ] heap: создайте пустую кучу и вставьте в нее каждый элемент по одному или возьмите диапазон значений и запишите их в кучу.
Каждая операция отправки в куче занимает время O (logn), поэтому, если вы нажимаете N элементов в кучу это займет O (NlogN) времени.
В дополнение к вышесказанному, алгоритм сортировки STL - это introsort , который представляет собой смесь быстрой и динамической сортировки (он переключается с быстрой сортировки на динамическую сортировку, если первое делает плохо). make_heap создает структуру кучи,
Они используются для создания и поддержки структуры данных кучи