std::collections::vecdeque (v0.2.2)
Double-ended queue with push and pop on both ends.
Latest
Overview
std::collections::vecdeque is a generic double-ended queue. It supports push and pop on both the front and the back.
pushFront, pushBack, popFront, and popBack operate on the ends; dropVecDeque releases the storage.
Source: thrustc/std/v0.2.2/collections/vecdeque.thrust
Public Signatures
Exported declarations for this module snapshot.
const VECDEQUE_INITIAL_CAPACITY: usize @public = 4;
struct VecDeque [T] @public {
fn newVecDeque [T] () VecDeque[T] @public;
fn withCapacity [T] (capacity: usize) VecDeque[T] @public;
fn dropVecDeque [T] (deque: ptr[VecDeque[T]]) void @public @deallocator;
fn getLength [T] (deque: ptr[VecDeque[T]]) usize @public;
fn getCapacity [T] (deque: ptr[VecDeque[T]]) usize @public;
fn isEmpty [T] (deque: ptr[VecDeque[T]]) bool @public;
fn getDataPointer [T] (deque: ptr[VecDeque[T]]) ptr[T] @public;
fn at [T] (deque: ptr[VecDeque[T]], index: usize) T @public;
fn front [T] (deque: ptr[VecDeque[T]]) T @public;
fn back [T] (deque: ptr[VecDeque[T]]) T @public;
fn ensureCapacity [T] (deque: ptr[VecDeque[T]], minimum: usize) void @public;
fn pushBack [T] (deque: ptr[VecDeque[T]], value: T) void @public;
fn pushFront [T] (deque: ptr[VecDeque[T]], value: T) void @public;
fn popBack [T] (deque: ptr[VecDeque[T]]) T @public;
fn popFront [T] (deque: ptr[VecDeque[T]]) T @public;
fn clear [T] (deque: ptr[VecDeque[T]]) void @public;
fn reserveCapacity [T] (deque: ptr[VecDeque[T]], newCapacity: usize) void @public;
fn shrinkToFit [T] (deque: ptr[VecDeque[T]]) void @public;
Behavior and Use
Operations are available on both ends: pushFront, pushBack, popFront, and popBack.
Call dropVecDeque when the container is no longer needed to release the backing storage.
Examples
import std::collections::vecdeque;
import std::io;
// Keep a sliding window of recent events.
fn main() s32 @public {
var recent := vecdeque::newVecDeque[s32]();
vecdeque::pushBack[s32](ref recent, 1);
vecdeque::pushBack[s32](ref recent, 2);
vecdeque::pushFront[s32](ref recent, 3);
var oldest: s32 = vecdeque::popFront[s32](ref recent);
io::print("oldest event: %d\n", oldest);
vecdeque::dropVecDeque[s32](ref recent);
return 0;
}
import std::collections::vecdeque;
import std::io;
// Read an event by its position in the window.
fn main() s32 @public {
var recent := vecdeque::newVecDeque[s32]();
vecdeque::pushBack[s32](ref recent, 1);
vecdeque::pushBack[s32](ref recent, 2);
vecdeque::pushFront[s32](ref recent, 3);
io::print("middle event: %d\n", vecdeque::at[s32](ref recent, 1));
vecdeque::dropVecDeque[s32](ref recent);
return 0;
}
import std::collections::vecdeque;
import std::io;
// Inspect both ends of the window.
fn main() s32 @public {
var recent := vecdeque::newVecDeque[s32]();
vecdeque::pushBack[s32](ref recent, 7);
vecdeque::pushBack[s32](ref recent, 8);
io::print("front: %d, back: %d\n", vecdeque::front[s32](ref recent), vecdeque::popBack[s32](ref recent));
vecdeque::dropVecDeque[s32](ref recent);
return 0;
}
Notes
- popFront and popBack require a non-empty deque.
- Use this when you need efficient insertion and removal at both ends.