Можно ли построить контейнер увеличиваемого размера на стеке - PullRequest
0 голосов
/ 26 мая 2020

Я искал это, но не смог найти ответов. Все мы знаем, что размер многих контейнеров STL можно изменять (за исключением таких вещей, как std::array, и c.), Но все они размещены в куче. Так что мне было интересно, можно ли построить контейнер изменяемого размера на стеке, и может ли кто-нибудь дать мне пример.

Мысль об этом:

Думаю что связанный список мог бы быть построен в стеке, потому что (насколько я знаю) вы выделяете узлы в куче только из-за времени жизни, но в целом я не уверен, что это будет работать.

1 Ответ

1 голос
/ 26 мая 2020

Он также должен быть очень ограничен по размеру из-за ограниченного размера стека.

То, что вы могли бы, например, реализовать, является векторным контейнером с изменяемым размером, который имеет небольшую постоянную память и, следовательно, небольшую константу максимальный размер.

Вы также можете создать связанный список в рекурсивной функции, где голова находится в текущем кадре, а узлы-преемники находятся в кадрах, которые рекурсивно вызывали функцию. Размер будет увеличиваться при вызове функции и уменьшаться при возврате.

Будет ли полезен такой контейнер - другой вопрос.


Если вы не против, можете Вы объясните идею связного списка подробнее (может быть, просто, может быть, дадите небольшую демонстрацию)?

Вот чрезвычайно глупый способ распечатать серию чисел, используя связанный список в стеке выполнения:

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);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...