Я делаю шахматный движок и ударил кирпичную стену с оптимизацией. После использования профилировщика я обнаружил, что генерация движения является самым большим фактором. Когда я подошел поближе, оказалось, что большая часть времени, генерирующего ходы, была потрачена на вызов std :: vector.push_back (move), когда я нашел ход.быстрый контейнер с переменным размером C++
Есть ли способ быстро создать контейнер C++ с динамическим размером? Это не может быть массив фиксированного размера, так как я не знаю заранее, сколько будет произведено ходов (хотя обычно их меньше 50).
Есть ли у кого-нибудь опыт в этом вопросе? При необходимости я напишу свой собственный контейнер, но я чувствую, что должен быть стандартный способ сделать это.
Ответы должны привести вас в правильном направлении. Иногда проблема с профайлерами заключается в том, что вы видите только, какие методы чаще всего вызываются, а не почему, возможно, вы можете уменьшить количество push_backs в целом, прежде чем пытаться оптимизировать контейнер. Вы также можете посмотреть здесь, чтобы получить информацию о вставке и ее сложности: http: // www.cplusplus.com/reference/vector/vector/push_back/ – Excelcius
Насколько велик «переезд»? Является ли стоимость копирования в вектор? –
Движение действительно должно соответствовать 32 битам, хотя вы должны иметь 'class Move', который обертывает это в гораздо более приятном интерфейсе. Даже с этим интерфейсом 'Move :: Move (Move const &') 'все равно будет просто копией' long'. – MSalters