可以在堆栈上构建可调整大小的容器吗
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);
}
我已经对此进行了搜索,但找不到答案。我们都知道很多 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);
}