可以在堆栈上构建可调整大小的容器吗

Could a re-sizable container be built on the on stack

我已经对此进行了搜索,但找不到答案。我们都知道很多 STL 容器都是可调整大小的(除了 std::array 等),但它们都是在堆上分配的。所以我想知道是否可以在堆栈上构建一个可调整大小的容器,是否有人可以给我一个例子。

想到这个:

我认为链表可以建立在栈上,因为(据我所知)因为生命周期,你只在堆上分配节点,但是总而言之,我不确定这是否可行。

由于堆栈的大小有限,它的大小也必须非常有限。

例如,您可以实现的是一个类似矢量的可调整大小的容器,它具有较小的常量存储空间,因此较小的常量最大尺寸。

您还可以在递归函数中创建链表,其中头在当前帧上,后继节点在递归调用函数的帧中。大小将通过调用函数增加,并通过返回减少。

这种容器是否有用是另一回事。


If you don't mind could you explain the linked list idea more (maybe, just maybe give a small demo)?

这是一个非常愚蠢的方法,可以在执行堆栈上使用链表打印一系列数字:

struct node {
    int data;
    node* next;
};

void foo(node* p) 
{ 
    if (p->data > 0) {
        node n {
            .data = p->data - 1,
            .next = p,
        };
        foo(&n);
    } else {
        for (; p ; p = p->next) {
            std::cout << p->data;
        }
    }
} 

int main () 
{
    node n {
        .data = 10,
        .next = nullptr,
    };
    foo(&n);
}