1. `std::stack`の動作原理:意図的な制約
`std::stack`は「後入れ先出し」(LIFO)の原則に従います。これは便利な反面、一番上の要素以外は操作できないという意図的な制約があります。シミュレーターでその挙動を体験してみましょう。
2. `MutantStack`の実装:制約を破って仕組みを覗く
`MutantStack`は、`std::stack`を継承し、本来隠されている内部コンテナのイテレータを外部に公開することで反復可能になります。その「突然変異」のプロセスをアニメーションで見てみましょう。
std::stack
protected:
Container c
begin()
end()
MutantStack
begin()
end()
3. なぜ`deque`が最適なのか?:パフォーマンス・ラボ
`stack`の性能は内部コンテナに依存します。`vector`の平均速度は速いですが、再確保時に性能が急低下(スパイク)します。安定性で勝る`deque`がデフォルトである理由を、シミュレーションで確かめましょう。
学びのまとめ
コンテナ | 判断基準 | 比喩 |
---|---|---|
`std::vector` | 平均速度は速いが、時々大きな遅延が発生する可能性。 | 猛スピードで走るが、満員になると乗客全員を乗り換えさせる**バス** 🚌 |
`std::deque` | 常に安定した速度を維持し、予測可能性が高い。 | 走行しながら新しい車両を連結できる**列車** 🚆 |
`std::list` | 拡張コストはゼロだが、全体的な基本速度が遅い。 | 柔軟だが移動に時間がかかる**宝探し** 🗺️ |