Struct ArrayDeque

Source
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_back will overwrite the front element
  • push_front will 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>

Source

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());
Source

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);
Source

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);
Source

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);
Source

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);
Source

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);
Source

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);
Source

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);
Source

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());
Source

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());
Source

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>

Source§

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)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for ArrayDeque<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the deque as a debug list showing all elements from front to back.

Source§

impl<'de, T: Deserialize<'de>> Deserialize<'de> for ArrayDeque<T>

Source§

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>

Source§

fn drop(&mut self)

Properly deallocates the deque’s memory and drops all contained elements.

Source§

impl<T> Extend<T> for ArrayDeque<T>

Source§

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)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl<T> From<&[T]> for ArrayDeque<T>
where T: Clone,

Source§

fn from(slice: &[T]) -> Self

Creates a deque from a slice by cloning all elements.

§Examples
use array_deque::ArrayDeque;

let slice = &[1, 2, 3];
let deque: ArrayDeque<i32> = ArrayDeque::from(slice);
assert_eq!(deque.len(), 3);
Source§

impl<T: Clone, const N: usize> From<&[T; N]> for ArrayDeque<T>

Source§

fn from(array: &[T; N]) -> Self

Creates a deque from an array reference by cloning all elements.

Source§

impl<T: Clone> From<&Vec<T>> for ArrayDeque<T>

Source§

fn from(vec: &Vec<T>) -> Self

Creates a deque from a vector reference by cloning all elements.

Source§

impl<T, const N: usize> From<[T; N]> for ArrayDeque<T>

Source§

fn from(array: [T; N]) -> Self

Creates a deque from an array by taking ownership of all elements.

§Examples
use array_deque::ArrayDeque;

let array = [1, 2, 3];
let deque: ArrayDeque<i32> = ArrayDeque::from(array);
assert_eq!(deque.len(), 3);
Source§

impl<T> From<Vec<T>> for ArrayDeque<T>

Source§

fn from(vec: Vec<T>) -> Self

Creates a deque from a vector by taking ownership of all elements.

§Examples
use array_deque::ArrayDeque;

let vec = vec![1, 2, 3];
let deque: ArrayDeque<i32> = ArrayDeque::from(vec);
assert_eq!(deque.len(), 3);
Source§

impl<T> FromIterator<T> for ArrayDeque<T>

Source§

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>

Source§

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§

type Output = T

The returned type after indexing.
Source§

impl<T> IndexMut<usize> for ArrayDeque<T>

Source§

fn index_mut(&mut self, i: usize) -> &mut Self::Output

Provides mutable indexed access to elements in the deque.

§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[0] = 42;
assert_eq!(deque[0], 42);
Source§

impl<'a, T> IntoIterator for &'a ArrayDeque<T>

Source§

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 Item = &'a T

The type of the elements being iterated over.
Source§

type IntoIter = ArrayDequeIter<'a, T>

Which kind of iterator are we turning this into?
Source§

impl<T> IntoIterator for ArrayDeque<T>

Source§

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]);
Source§

type Item = T

The type of the elements being iterated over.
Source§

type IntoIter = ArrayDequeIntoIter<T>

Which kind of iterator are we turning this into?
Source§

impl<T: PartialEq> PartialEq for ArrayDeque<T>

Source§

fn eq(&self, other: &Self) -> bool

Compares two deques for equality based on their elements and order.

Two deques are equal if they have the same length and all elements compare equal in the same order.

1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: Serialize> Serialize for ArrayDeque<T>

Source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serializes the deque as a sequence of its elements.

Source§

impl<T: Eq> Eq for ArrayDeque<T>

Auto Trait Implementations§

§

impl<T> Freeze for ArrayDeque<T>

§

impl<T> RefUnwindSafe for ArrayDeque<T>
where T: RefUnwindSafe,

§

impl<T> !Send for ArrayDeque<T>

§

impl<T> !Sync for ArrayDeque<T>

§

impl<T> Unpin for ArrayDeque<T>
where T: Unpin,

§

impl<T> UnwindSafe for ArrayDeque<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,