Use stack (LIFO), queue (FIFO), and priority_queue for specific data access patterns.
Container adaptors are STL components that provide a restricted interface to an underlying container, adapting it for a specific purpose. They don't have their own iterators and are designed for simple data access patterns. **`std::stack`** provides a Last-In, First-Out (LIFO) data structure. Think of it like a stack of plates. You can only add a new plate to the top (`push()`) and remove the top plate (`pop()`). You can also view the top plate without removing it (`top()`). By default, `std::stack` uses `std::deque` as its underlying container. **`std::queue`** implements a First-In, First-Out (FIFO) data structure, like a checkout line. You add elements to the back (`push()`) and remove them from the front (`pop()`). You can view the front and back elements with `front()` and `back()`. It also uses `std::deque` by default. **`std::priority_queue`** is a queue where elements are ordered by priority. When you `pop()` an element, you always get the one with the highest priority (by default, the largest value). Elements are added with `push()`. It is typically implemented using a heap data structure and uses `std::vector` as its underlying container. These adaptors are useful because their limited interfaces clearly communicate their intended use and prevent accidental misuse of the data structure.