C++では、STL、テンプレートクラス<vector>
があります。 私たちはそれがO(1)
ランダムアクセスとテール変更をサポートしていることを知っています。 私の質問は、なぜ我々は<vector>
のpush_front、またはpop_frontを定義していないのですか?ベクトルの前にプッシュ/ポップがないのはなぜですか?
ベクトルの前に要素をプッシュ/ポップしたい場合は、配列内の各要素を1ステップずつ移動しなければならず、それにはO(n)
が必要です。
しかし、必ずしもそうとは限りません。我々が円アレイを用いて<vector>
を実装すると、O(1)
ランダムアクセスの能力を失うことなく、ベクトルのフロントとテールの両方からO(1)
プッシュ/ポップを達成できることを考慮してください。個人的には、実装しないほんの少しのオーバーヘッドではなく、何らかの理由で考えることができませんpush_front
/pop_front
<vector>
です。何かご意見は?
それはそれがそうであるように設計されました。物語の終わり。 –
循環バッファーを処理するために必要な計算のオーバーヘッドは考える価値がありませんか?それは常にO()についてのことではなく、現実の世界のパフォーマンスについても同じです。 –
標準によって設定された制限のため、std :: vectorを循環として定義することはできません。 –