pub struct ArrayDeque<T> { /* private fields */ }
Expand description
A fixed-capacity, heap-allocated double-ended queue backed by a circular buffer.
ArrayDeque<T>
allocates a buffer on the heap with the given capacity. All
insertions and removals at either end run in O(1) time. Once full, further
push_back
calls overwrite the oldest front element, and push_front
calls
overwrite the oldest back element (FIFO overwrite behavior).
§Examples
use array_deque::ArrayDeque;
let mut dq = ArrayDeque::new(3);
dq.push_back("a");
dq.push_back("b");
dq.push_front("c");
assert_eq!(dq.len(), 3);
assert_eq!(dq[0], "c");
// Overflow: overwrites the back ("b")
dq.push_front("x");
assert_eq!(dq.pop_back(), Some("a"));
Implementations§
Source§impl<T> ArrayDeque<T>
impl<T> ArrayDeque<T>
Sourcepub fn new(cap: usize) -> Self
pub fn new(cap: usize) -> Self
Creates a new ArrayDeque
with the specified capacity.
§Arguments
cap
- The fixed capacity of the deque. Must be greater than zero.
§Panics
Panics if cap
is zero or if memory allocation fails.
§Examples
use array_deque::ArrayDeque;
let deque: ArrayDeque<i32> = ArrayDeque::new(10);
assert_eq!(deque.capacity(), 10);
assert!(deque.is_empty());
Sourcepub fn push_back(&mut self, value: T)
pub fn push_back(&mut self, value: T)
Appends an element to the back of the deque.
If the deque is at capacity, this will overwrite the front element and advance the front pointer.
§Arguments
value
- The element to append
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(1);
deque.push_back(2);
assert_eq!(deque.len(), 2);
Sourcepub fn push_front(&mut self, value: T)
pub fn push_front(&mut self, value: T)
Prepends an element to the front of the deque.
If the deque is at capacity, this will overwrite the back element.
§Arguments
value
- The element to prepend
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_front(1);
deque.push_front(2);
assert_eq!(deque[0], 2);
assert_eq!(deque[1], 1);
Sourcepub fn pop_back(&mut self) -> Option<T>
pub fn pop_back(&mut self) -> Option<T>
Removes and returns the last element from the deque.
§Returns
Some(T)
if the deque is not empty, None
otherwise.
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(1);
deque.push_back(2);
assert_eq!(deque.pop_back(), Some(2));
assert_eq!(deque.pop_back(), Some(1));
assert_eq!(deque.pop_back(), None);
Sourcepub fn pop_front(&mut self) -> Option<T>
pub fn pop_front(&mut self) -> Option<T>
Removes and returns the first element from the deque.
§Returns
Some(T)
if the deque is not empty, None
otherwise.
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(1);
deque.push_back(2);
assert_eq!(deque.pop_front(), Some(1));
assert_eq!(deque.pop_front(), Some(2));
assert_eq!(deque.pop_front(), None);
Sourcepub fn front(&self) -> Option<&T>
pub fn front(&self) -> Option<&T>
Returns a reference to the front element without removing it.
§Examples
use array_deque::ArrayDeque;
let mut dq = ArrayDeque::new(3);
assert_eq!(dq.front(), None);
dq.push_back(42);
assert_eq!(dq.front(), Some(&42));
Sourcepub fn back(&self) -> Option<&T>
pub fn back(&self) -> Option<&T>
Returns a reference to the back element without removing it.
§Examples
use array_deque::ArrayDeque;
let mut dq = ArrayDeque::new(3);
dq.push_back(1);
dq.push_back(2);
assert_eq!(dq.back(), Some(&2));
Sourcepub fn iter(&self) -> impl Iterator<Item = &T>
pub fn iter(&self) -> impl Iterator<Item = &T>
Returns an iterator over the elements of the deque (front to back).
§Examples
use array_deque::ArrayDeque;
let mut dq = ArrayDeque::new(3);
dq.push_back(1);
dq.push_back(2);
let v: Vec<_> = dq.iter().cloned().collect();
assert_eq!(v, vec![1,2]);
Sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns the maximum capacity of the deque.
§Examples
use array_deque::ArrayDeque;
let dq: ArrayDeque<i32> = ArrayDeque::new(5);
assert_eq!(dq.capacity(), 5);
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of elements currently in the deque.
§Examples
use array_deque::ArrayDeque;
let mut dq = ArrayDeque::new(3);
assert_eq!(dq.len(), 0);
dq.push_back(1);
assert_eq!(dq.len(), 1);
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if the deque contains no elements.
§Examples
use array_deque::ArrayDeque;
let mut dq = ArrayDeque::new(3);
assert!(dq.is_empty());
dq.push_back(1);
assert!(!dq.is_empty());
Trait Implementations§
Source§impl<T: Clone> Clone for ArrayDeque<T>
impl<T: Clone> Clone for ArrayDeque<T>
Source§fn clone(&self) -> Self
fn clone(&self) -> Self
Creates a deep copy of the deque with identical capacity and contents.
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(1);
deque.push_back(2);
let cloned = deque.clone();
assert_eq!(deque.len(), cloned.len());
assert_eq!(deque[0], cloned[0]);
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<T: Debug> Debug for ArrayDeque<T>
impl<T: Debug> Debug for ArrayDeque<T>
Source§impl<'de, T: Deserialize<'de>> Deserialize<'de> for ArrayDeque<T>
impl<'de, T: Deserialize<'de>> Deserialize<'de> for ArrayDeque<T>
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserializes a sequence into a deque (capacity == item count).
Source§impl<T> Drop for ArrayDeque<T>
impl<T> Drop for ArrayDeque<T>
Source§impl<T> Extend<T> for ArrayDeque<T>
impl<T> Extend<T> for ArrayDeque<T>
Source§fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
Extends the deque by pushing each item of the iterator to the back.
§Examples
use array_deque::ArrayDeque;
let mut dq = ArrayDeque::new(5);
dq.extend([1,2,3]);
assert_eq!(dq.len(), 3);
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl<T> From<Vec<T>> for ArrayDeque<T>
impl<T> From<Vec<T>> for ArrayDeque<T>
Source§impl<T> FromIterator<T> for ArrayDeque<T>
impl<T> FromIterator<T> for ArrayDeque<T>
Source§fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
Creates a deque from an iterator by collecting all items. Capacity == number of items (min 1).
§Examples
use array_deque::ArrayDeque;
let dq: ArrayDeque<_> = (0..3).collect();
assert_eq!(dq.len(), 3);