# Stack based array

**URL:** <https://forum.juce.com/t/stack-based-array/60364>\
**Category:** General JUCE discussion\
**Created:** [March 8, 2024, 3:37pm UTC](https://forum.juce.com/t/stack-based-array/60364 "2024-03-08T15:37:20Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![AdamVenn](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/adamvenn/32/17023_2.png) [@AdamVenn](https://forum.juce.com/u/AdamVenn)\
**Post date:** [March 8, 2024, 3:37pm UTC](https://forum.juce.com/t/stack-based-array/60364/1 "2024-03-08T15:37:20Z")

</div>

What do people do when they want to pass around little arrays on the audio thread when the arrays don’t have a fixed size? Something like this?

```auto
template<class T>
class MiniStackArray
{
public:
    MiniStackArray(const std::initializer_list<T>& itemsToHold)
    {
        jassert(itemsToHold.size() < max_size);
        auto limit{ std::min(itemsToHold.size(), max_size) };
        auto iter{ itemsToHold.begin() };
        for (auto i = 0; i < limit; i++)
        {
            items[i] = *iter++;
        }
    };

    // Never have to implement iterators??
    constexpr auto getSpan() { return std::span{ items, size }; }
private:
    constexpr static size_t max_size{ 10 };
    T items[max_size] {};
    int size{};
};

```

I haven’t tested it… Is there a standard solution out there already?

---

<div class="post-metadata">

**Author:** ![AdamVenn](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/adamvenn/32/17023_2.png) [@AdamVenn](https://forum.juce.com/u/AdamVenn)\
**Post date:** [March 12, 2024, 6:14pm UTC](https://forum.juce.com/t/stack-based-array/60364/2 "2024-03-12T18:14:46Z")

</div>

Just answering my own question in case anyone searches the forum for the same thing:

> <https://github.com/Tracktion/choc/blob/main/containers/choc_SmallVector.h>

---

<div class="post-metadata">

**Author:** ![xenakios](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/xenakios/32/4047_2.png) [@xenakios](https://forum.juce.com/u/xenakios)\
**Post date:** [March 12, 2024, 6:29pm UTC](https://forum.juce.com/t/stack-based-array/60364/3 "2024-03-12T18:29:17Z")

</div>

There’s also std::array which has a compile time size.

[https://en.cppreference.com/w/cpp/container/array](https://en.cppreference.com/w/cpp/container/array)

---

<div class="post-metadata">

**Author:** ![AdamVenn](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/adamvenn/32/17023_2.png) [@AdamVenn](https://forum.juce.com/u/AdamVenn)\
**Post date:** [March 12, 2024, 8:00pm UTC](https://forum.juce.com/t/stack-based-array/60364/4 "2024-03-12T20:00:55Z")

</div>

Yeah, I saw an implementation where the ‘smallVector’ was indexing into a std::array actually.
