Я смотрю на класс C ++, который обтекает std :: vector и хранит размер вектора. Класс обновляет этот размер каждый раз, когда вектор изменяется, что приводит к большому количеству избыточного кода (поскольку актуальный размер всегда доступен из метода size ()). Это действительно быстрее или компилятор оптимизирует повторное использование size ()?
std::vector::size
имеет постоянную сложность по времени, так что да, он уже хранится в векторе, а код является избыточным.
Во-первых, в отличие от того, что указано в предыдущих публикациях,
реализации std::vector
что я видел (MS и G ++) делать
не размер кеша. С другой стороны, это можно рассчитать
простым вычитанием указателя, и все, что вы делаете для кэширования
размер почти наверняка добавит больше накладных расходов, чем сэкономит.
На всех реализациях, которые я видел, кэширование помедленнее. Это просто трата пропускной способности памяти.
Насколько я знаю, стандартная реализация библиотеки vector::size
просто возвращает кэшированный размер, не пересчитывая его каждый раз.