pub struct ArrayDeque<T> { /* private fields */ }Expand description
A fixed-capacity double-ended queue implemented as a circular buffer.
ArrayDeque provides efficient insertion and removal at both ends with O(1)
time complexity. When the deque reaches its capacity, new elements will
overwrite the oldest elements (FIFO behavior for overwrites).
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(1);
deque.push_back(2);
deque.push_front(0);
assert_eq!(deque.len(), 3);
assert_eq!(deque[0], 0);
assert_eq!(deque[1], 1);
assert_eq!(deque[2], 2);§Capacity and Overflow Behavior
When the deque is full and a new element is added:
- push_backwill overwrite the front element
- push_frontwill overwrite the back element
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(2);
deque.push_back(1);
deque.push_back(2);
deque.push_back(3); // Overwrites 1
assert_eq!(deque.pop_front(), Some(2));
assert_eq!(deque.pop_front(), Some(3));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 iter(&self) -> impl Iterator<Item = &T>
 
pub fn iter(&self) -> impl Iterator<Item = &T>
Returns an iterator over the elements of the deque.
The iterator yields elements from front to back.
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(1);
deque.push_back(2);
deque.push_back(3);
let mut iter = deque.iter();
assert_eq!(iter.next(), Some(&1));
assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), Some(&3));
assert_eq!(iter.next(), None);Sourcepub fn capacity(&self) -> usize
 
pub fn capacity(&self) -> usize
Returns the maximum capacity of the deque.
§Examples
use array_deque::ArrayDeque;
let deque: ArrayDeque<i32> = ArrayDeque::new(10);
assert_eq!(deque.capacity(), 10);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 deque = ArrayDeque::new(3);
assert_eq!(deque.len(), 0);
deque.push_back(1);
assert_eq!(deque.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 deque = ArrayDeque::new(3);
assert!(deque.is_empty());
deque.push_back(1);
assert!(!deque.is_empty());Sourcepub fn is_full(&self) -> bool
 
pub fn is_full(&self) -> bool
Returns true if the deque has reached its maximum capacity.
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(2);
assert!(!deque.is_full());
deque.push_back(1);
deque.push_back(2);
assert!(deque.is_full());Sourcepub fn clear(&mut self)
 
pub fn clear(&mut self)
Removes all elements from the deque.
This operation properly drops all contained elements and resets the deque to an empty state.
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(1);
deque.push_back(2);
deque.clear();
assert!(deque.is_empty());
assert_eq!(deque.len(), 0);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 the same capacity and elements.
§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.
The capacity is set to the number of elements in the sequence.
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 with the contents of an iterator.
Elements are added to the back of the deque. If the deque becomes full during extension, older elements will be overwritten.
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(5);
deque.extend(vec![1, 2, 3]);
assert_eq!(deque.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.
The capacity is set to the number of elements in the iterator (with a minimum of 1).
§Examples
use array_deque::ArrayDeque;
let deque: ArrayDeque<i32> = (1..4).collect();
assert_eq!(deque.len(), 3);
assert_eq!(deque[0], 1);Source§impl<T> Index<usize> for ArrayDeque<T>
 
impl<T> Index<usize> for ArrayDeque<T>
Source§fn index(&self, i: usize) -> &Self::Output
 
fn index(&self, i: usize) -> &Self::Output
Provides indexed access to elements in the deque.
Index 0 corresponds to the front element, index 1 to the second element, etc.
§Panics
Panics if the index is out of bounds (>= len()).
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(10);
deque.push_back(20);
assert_eq!(deque[0], 10);
assert_eq!(deque[1], 20);Source§impl<T> IndexMut<usize> for ArrayDeque<T>
 
impl<T> IndexMut<usize> for ArrayDeque<T>
Source§impl<'a, T> IntoIterator for &'a ArrayDeque<T>
 
impl<'a, T> IntoIterator for &'a ArrayDeque<T>
Source§fn into_iter(self) -> Self::IntoIter
 
fn into_iter(self) -> Self::IntoIter
Creates an iterator over references to the deque’s elements.
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(1);
deque.push_back(2);
for item in &deque {
    println!("{}", item);
}Source§type IntoIter = ArrayDequeIter<'a, T>
 
type IntoIter = ArrayDequeIter<'a, T>
Source§impl<T> IntoIterator for ArrayDeque<T>
 
impl<T> IntoIterator for ArrayDeque<T>
Source§fn into_iter(self) -> Self::IntoIter
 
fn into_iter(self) -> Self::IntoIter
Creates a consuming iterator that moves all elements out of the deque.
The deque cannot be used after calling this method.
§Examples
use array_deque::ArrayDeque;
let mut deque = ArrayDeque::new(3);
deque.push_back(1);
deque.push_back(2);
let vec: Vec<i32> = deque.into_iter().collect();
assert_eq!(vec, vec![1, 2]);