c ++ std :: vector performance [ссылка обязательна] - PullRequest
2 голосов
/ 26 ноября 2010

Я пишу параллельную реализацию некоторых структур данных. Я хотел бы узнать, если кто-то знает о разнице в производительности между чистыми указателями и std :: vector. Если вы знаете достоверные документы об этом, пожалуйста, напишите URL / название книги / что угодно. Любые советы приветствуются!

Ответы [ 4 ]

5 голосов
/ 26 ноября 2010

Разница составляет использование и реализация относительная.

3 голосов
/ 26 ноября 2010

Вы можете сделать std :: vector так же быстро, как обычные указатели, используя оператор unchecked [] и соответственно изменяя размер.Реальность такова, что vector - это абстракция во время компиляции над указателем, а не во время выполнения, если только вы не решите использовать дополнительные функции.Что гораздо важнее, это значительно возросшие предложения вектора безопасности - итераторы отладки, автоматическое и безопасное управление ресурсами и т. Д. Нет смысла использовать необработанный указатель.

Редактировать: я ссылаюсь на тот прогон профилирования, который вы выполняли раньшеВы даже думали потерять безопасность вектора.

0 голосов
/ 26 ноября 2010

Если вы хотите сравнить std::vector с каким-либо рукописным динамическим массивом, вот несколько ориентиров:

  • Важным является коэффициент изменения размера при вставке.Этот коэффициент не указан стандартом, но обычно составляет 1,5 или 2, и он должен гарантировать амортизированное постоянное время при операциях вставки.
  • Распределитель: большая производительность зависит от используемого механизма выделения,То же самое касается ваших указателей.
  • Проверка границы может произойти в std::vector, если вы позвоните vector::at, чего не может быть с необработанными указателями.
0 голосов
/ 26 ноября 2010

Согласно этому ответу на аналогичный вопрос , доступ к элементу в динамически распределенном массиве по сравнению с std::vector будет примерно таким же. В этом вопросе есть хороший анализ, а также в .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...