2010-03-15 2 views
1

Я разрабатываю симуляцию на основе OpenGL в C++. Теперь я optmizing мой код, и я вижу на протяжении всего кода частое использование std: list и std: vector. Что еще более важно: продолжить использование структур данных stl stl или связанных с указателем ссылок? Основная операция, которая включает std :: list и std :: vector, открывает итератор и циклически перемещает все элементы в структурах данных и применяет некоторую обработкуC++ stl коллекции или связанные списки

+3

Если вы еще не профилировали свой код, вы задаете вопрос преждевременно. Вы должны знать, прежде чем попасть сюда, если std :: list или std :: vector занимают непропорциональное количество времени. –

+2

Я подозреваю, что если вы прокомментируете свой код, вы увидите, что использование STL не самое медленное. Не беспокойтесь, задавая этот вопрос, пока это не самая медленная вещь ... в полностью оптимизированном режиме выпуска. –

+0

Просто FYI, «перформанс» - это слово, которое я чаще всего слышу для того, что вы называете «перформативным». – sblom

ответ

5

Как насчет stl контейнеров указателей?

Очень маловероятно, что вы сможете разработать более эффективные структуры, чем встроенные. Единственная нижняя часть - это контейнеры, на самом деле содержащие копии объектов, хранящихся в них. Если вы беспокоитесь об этой накладной памяти (несколько структур, которые содержат несколько копий одних и тех же объектов, нарушая согласованность по всей таблице), вы должны подумать об использовании stl-структур указателей в том, что вам нужно.

Алгоритмически, структура, в которой вы нуждаетесь, реализована в stl, поэтому вы должны ее использовать. Нет необходимости переопределять одну и ту же структуру.

4

Используйте C++ STL структуры данных, но используйте их эффективно. Если вы используете зЬй :: список и зЬй :: вектор, искать такие функции, как найти, for_each, аккумулировать и т.д. Вот некоторые хорошие чтение: http://www.cplusplus.com/reference/

Прочитайте разделы по алгоритму, числовой и функциональный , Кроме того, я настоятельно рекомендую эффективный STL Скотта Мейерса.

Смежные вопросы