O ile rozumiem, motywem deque jest zapewnienie kontenerowi o swobodnym dostępie z wydajnym push_front
.Dlaczego std :: deque nie jest wektorem z pamięcią zarezerwowaną przed indeksem 0?
Powszechnie wymieniane zalety wektora w porównaniu do deque obejmują szybsze przechodzenie i at()
, ale głównie jego kompatybilność z C, ponieważ gwarantuje przyległą pamięć. Deque nie, ponieważ jest zbiorem fragmentów pamięci, z których każda ma wiele wartości.
Jestem zdezorientowany. Dlaczego deque nie jest zbudowany jak wektor, ale z pamięcią zarezerwowaną przed indeksem 0
oprócz pamięci zarezerwowanej po indeksie size-1
? Zapewniłoby to pamięć ciągłą, umożliwiłoby wydajną push_front
, a nawet uniknęłoby dodatkowego pośrednictwa podczas dereferencji iteratorów.
Aby zminimalizować przesuwanie podczas wstawiania, zawarte wartości do przesunięcia zależą od punktu wstawienia. Jeśli wstawiasz w indeksie n
przed size()/2
, pozostały wartości przesunięcia do n
. W przeciwnym razie przesuń w prawo wartości po n
.
Czego mi brakowało, jest tak ważne, że deque to zbiór tablic wartości, a nie jeden wielki zestaw?
zamortyzowanego kosztu, może być? Szybkie 'push_front' nie jest jedynym wymaganiem dla' deque' –
Ile pamięci zostanie zarezerwowane? 1KB, 10KB, 1M, 1GB, 24GB? Cokolwiek zrobisz, ktoś będzie narzekał, że jest za dużo lub za mało ... –
Afaik to sposób, w jaki Qt implementuje swoją QList – BeniBela