rust-stackvector
================

[Documentation](https://docs.rs/stackvector/)

[Release notes](https://github.com/Alexhuszagh/rust-stackvector/releases)

"StackVec": vector-like facade for stack-allocated arrays.

# Comparison to ArrayVec

[ArrayVec](https://github.com/bluss/arrayvec) is a relatively mature stack vector implementation, using a backing array like stackvector. The main differences between ArrayVec and StackVec are in the compatibility with Vec's API, as well as the ease-of-creation.

**Compatibility with Vec's API**

ArrayVec includes numerous modifications from Vec's API, effectively requiring a wrapper to use it analogously to Vec. In certain situations, the extra functionality is desirable (for example, ArrayVec has `push`, which panics if the container exceeds the array's bounds, `try_push`, and `push_unchecked`, while stackvector only has `push`). In other cases, ArrayVec is missing numerous methods that simplify working with Vec. For example, ArrayVec is missing:

1. Deduplication (`dedup`, `dedup_by`, `dedup_by_key`).
2. Insert many elements (`insert_many`) (Non-standard).

Likewise, stackvector is missing certain convenience methods that are not present in Vec:

1. Stack-allocated array is full (`is_full`).
2. Dispose without dropping (`dispose`).

**Version Support**

Both ArrayVec and stackvector have support for Rustc versions as old as 1.20.0.

# License

StackVector is derived from Servo's [smallvec](https://github.com/servo/rust-smallve), and like smallvec, it is dual licensed under either the MIT or Apache 2.0 license.

# Version Support

Stackvector has been tested on version of Rustc as low as 1.36.0 (needed for `mem::MaybeUninit`).
