Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C++ (list) Как инициализировать переменные внутри функции без автоматического удаления? static не подходит

глеб рудаков Знаток (451), открыт 4 недели назад
Я новичок, попробовал реализовать список. Как функции push_back() создавать новые переменные без их автоматического удаления из стека?
 template <typename value_type> 
struct list
{
class iterator
{
friend list;

iterator * previous;
iterator * next;
value_type value;

void bad_init() {previous = next = this;}

iterator() : value() {bad_init();};
iterator(value_type var) : value(var) {bad_init();};

iterator(iterator * left_iter, iterator * right_iter)
: previous(left_iter), next(right_iter) {};

iterator(value_type value, iterator * left_iter, iterator * right_iter)
: iterator(left_iter, right_iter) {value = value;};

public:
bool operator == (const iterator& another)
{
return (previous == another.previous && next == another.next && value == another.value);
}
bool operator != (const iterator& another)
{return !(*this == another);}

iterator& operator ++ ()
{
previous = next->previous;
next = next->next;
value = next->value;
return *this;
}
iterator& operator -- ()
{
previous = previous->previous;
next = previous->next;
value = previous->value;
return *this;
}

int& operator * ()
{
return value;
}
};

private:
iterator start_iter;
iterator end_iter;
unsigned int list_size;

public:

list() : list_size(2) {default_init();};

void default_init()
{
start_iter.previous = start_iter.next = &end_iter;
end_iter.previous = end_iter.next = &start_iter;
}


void push_back(value_type value)
{
iterator new_iter (&end_iter, &start_iter);
new_iter.value = value;

start_iter.previous = end_iter.next = &new_iter;
end_iter = new_iter;

++list_size;
}


iterator begin() {return start_iter;}
iterator end() {return end_iter;}
int size() {return list_size;}
};
1 ответ
Jurijus Zaksas Искусственный Интеллект (445767) 4 недели назад
>Как функции push_back() создавать новые переменные
Новые переменные создавать нельзя, это у тебя какие-то странные идеи.
Научись работать с динамической памятью, объектами...
глеб рудаковЗнаток (451) 4 недели назад
типа через new ? а функция разве не будет автоматически их уничтожать?
глеб рудаков, для си++ надо delete использовать и от тебя зависит, будет ли уборка памяти. Для классов в деструкторе потом надо самому уборкой заняться
глеб рудаковЗнаток (451) 4 недели назад
спасибо, буду копать в этом направлении
Похожие вопросы