В C++, STL, у нас есть класс шаблонов <vector>
. Мы знаем, что он поддерживает O(1)
случайный доступ и модификацию хвоста. Мой вопрос: почему мы не определяем push_front или pop_front в <vector>
?Почему нет push/pop перед вектором?
Одно из объяснений состоит в том, что если мы хотим, чтобы элемент push/pop в начале вектора, мы должны перенести каждый элемент в массив на один шаг, и это будет стоить O(n)
.
Но я думаю, что это не всегда так. Учитывая, что если мы реализуем <vector>
с круговым массивом, мы можем достичь O(1)
push/pop с фронта и хвоста вектора, не теряя при этом возможности O(1)
случайного доступа. Поэтому лично я не могу думать о какой-либо причине, а не только о незначительных накладных расходах, чтобы не реализовывать push_front
/pop_front
для <vector>
. Есть предположения?
Он был разработан так, как есть. Конец истории. –
И накладные расходы на вычисления, необходимые для обработки кругового буфера, не стоит об этом думать? Речь идет не только о O(), но и о реальной реальной производительности. –
Мы не можем определить std :: vector как круглый, из-за ограничений, установленных стандартом. –