Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Односвязный список


Автор: колючка 9.12.2006, 18:02
 smile Нужно реализовать односвязный список с однонаправленным итератором. 
Общие указания 
1)    Реализовать структуру данных, поддерживающую данный набор операций. Структура данных должна быть представлена шаблонным классом с перегруженными операторами.
2)    Шаблоны функций следует поместить в .h-файл.
3)    Тестовая программа должна содержать вызовы всех операций для структур, содержащих данные как минимум двух различных типов.
1)    Односвязный список с однонаправленным итератором
Функции-члены списка:
a)    Конструктор по умолчанию, деструктор, конструктор копии, operator=
b)    Возвращение количества элементов
c)    Пуст ли список
d)    operator<< и operator+= – добавление элемента в конец списка
e)    operator+= – добавление в конец списка другого списка
f)    find – поиск значения и возвращение итератора на него
g)    insert – вставка элемента в позицию, задаваемую итератором
h)    insert – вставка подсписка в позицию, задаваемую итератором
i)    remove – удаление элемента в позиции, задаваемой итератором
j)    remove – удаление диапазона элементов, задаваемого двумя итераторами
k)    cut – вырезание подсписка, задаваемого двумя итераторами
l)    divide – расщепление списка на два в позиции, задаваемой итератором
Функции-члены итератора списка:
a)    Конструктор
b)    eol – состояние “конец списка”
c)    operator++ – префиксный и постфиксный
d)    operator* – ссылка на текущий элемент в списке
Внешние функции:
a)    foreach – применение функции, передаваемой в качестве параметра, к диапазону значений, задаваемому парой итераторов
b)    find – поиск значения в диапазоне, задаваемом парой итераторов, и возвращение итератора на него
m)    operator==, operator!=
n)    operator+ – слияние двух списков в третий
c)    operator<< – вывод в поток
d)    operator>> – ввод из потока (признак конца ввода – ввод некоторого значения)
Это полный текст задания. Буду благодарна за любую помощь! Вообще не представляю с какой стороны к этой задаче подойти  smile 

Автор: MAKCim 9.12.2006, 18:44
Цитата

Вообще не представляю с какой стороны к этой задаче подойти

начни так
Код

template<class T> class list {
private:
    typedef list<T> list_t;
private:
    struct list_node {
        list_node(const T& p_value = T(), list_node *p_next = 0):
            next(p_next), value(p_value) {}
        T value;
         list_node* next;
    };
private:
    list_t *head;
    list_t *end;
private:
    list_t *alloc(const T& value) const throw(bad_alloc) {
        return new list_t(value);
    }
public:
    list(): head(0), end(0) {}

    list_t& operator += (const T& value) {
        list_t *ptr = alloc(value);
        if (!end) head = end = ptr;
        else {
            end -> next = ptr;
            end = ptr;
        }
        return *this;
    }
};

Автор: колючка 11.12.2006, 18:14
Спасибо smile Попробую сделать так!

Автор: колючка 11.12.2006, 19:08
К сожалению, ничего не получается  smile  smile  Во-первых я не могу разобраться что к чему (если не трудно, можешь добавить коментарии) и еще, самое главное, у меня этот код не компилируется smile

Автор: Alexeis 12.12.2006, 00:36
Цитата(колючка @  11.12.2006,  19:08 Найти цитируемый пост)
и еще, самое главное, у меня этот код не компилируется

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

Автор: колючка 12.12.2006, 11:01
error C2951: template declarations are only permitted at global, namespace, or class scope
error C2146: syntax error : missing ')' before identifier 'bad_alloc'
 see reference to class template instantiation 'wmain::list<T>' being compiled
error C3646: 'bad_alloc' : unknown override specifier
error C2059: syntax error : ')'

Вот такие вот ошибки выдает мне мой компилятор  smile  Помогите разобраться что он от меня хочет! Пожалуйста, ОЧЕНЬ надо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)