ベクトルでリストを実装するのは見当違いです。
説明します。通常、コンテナーは特定の一連の目標を達成するように設計されており、基礎となる実装はそれらの目標に基づいて選択されます。
ベクターは連続したメモリを持ち、ポインター演算によって任意のセルに到達できるため、非常に優れています。残念ながら、ベクトルの中心で要素を挿入または削除すると、ベクトルのパフォーマンスが低下します。
リストには、正反対の意図があります。リスト内の特定のポイントに移動するには、リンクが連続していないためにリンクをたどる必要があるため、時間がかかります。しかし、リストの主な目的は、迅速な挿入、削除、並べ替え、スプライシング、反転などを可能にすることです。
そのため、ベクターをリストの実装ベースと考えるのは (実行可能ですが)、実際にはこれを見る方法ではありません。ベクトルを使用してリストを実装するということは、基本的に、最初にリストを選択する利点がまったくないことを意味します。
編集
以下のコメントで他の人が指摘しているように、より複雑な実装を考えている場合は、パフォーマンス上の利点を確実に得ることができます。
たとえば、すべてのポインターへの参照を含むベクトルを維持し、その参照ベクトルを順番に維持するように作業する場合、比較的高速な削除/挿入などを行いながら、ポインター演算アクセスの利点を得ることができます。また、参照ベクトルは動的に割り当てられたオブジェクトへのポインターを保持するだけなので、参照ベクトルの操作はコストがかからず、連続したメモリの大量の領域を使用する必要はありません (ベクトルは単に NumElements * sizeof(pointer) on になります)あなたのアーキテクチャ)。
楽しみのために std::deque の実装を見てください。 挿入/削除/その他の操作を高速化するために、ポインターによってリンクされた連続したメモリ領域間にいくつかの興味深い相互作用があります。