Можете ли вы предотвратить проверку границ std :: vector в push_back ()?

Я знаю, что есть способы делать или не делать проверку границ при индексации вектора, но в особенности в push_back (), даже если я знаю, что емкость вектора достаточно велика (т.е. я достаточно зарезервирован), и я запустил цикл, толкающий в него элементы, я бы предположил, что, поскольку он динамически изменяет размер, ему всегда придется выполнять проверку границ (или проверку размера) для каждого push_back.

Если это так, то я подумал, что что-то вроде fast_push () будет полезно, если вы знаете, что не превысите емкость.

Я слышал заявления о том, что некоторые векторные библиотеки быстрее, такие как эта http://andreoffringa.org/?q=uvector , но я не видел конкретно проблемы с push_back (), когда знание проверки границ не понадобится. Тот, что в ссылке, заявляет о повышении скорости до 50%. Одной из них является предотвращение инициализации значения в конструкции, когда она вам не нужна, и некоторые другие вещи.

Благодарю.

2

Решение

Начиная с C ++ 11 есть дополнение к std :: vector :: emplace_back (…). Эта функция создаст элемент на месте и может повысить производительность.

И вам не стоит беспокоиться о проверке диапазона в std :: vector. Это всего лишь одна инструкция, и предсказание ветвления всегда будет правильным, если вектор достаточно большой.

0

Другие решения

Других решений пока нет …