Форум программистов, компьютерный форум CyberForum.ru

Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сформировать из значений массива другой массив, расположив в нем сначала цифры, затем – буквы, затем - символы, не являющихся ни буквами, ни цифрами http://www.cyberforum.ru/cpp-beginners/thread271043.html
Создать массив из 20 символьных значений. Сформировать из его значений другой массив, расположив в нем сначала цифры, затем – буквы, затем - символы, не являющихся ни буквами, ни цифрами.
C++ В массиве поменять местами его максимальное и минимальное значения В массиве из 15 вещественных чисел поменять местами его максимальное и минимальное значения. http://www.cyberforum.ru/cpp-beginners/thread271040.html
C++ кто знает как?
1. Написать шаблон функции для нахождения индексов элементов из заданного интервала, посортованих за спадением значений. Потом отсортировать их за ростом. 2.Создать 2 шаблонных класса с конструктором инициализации и конструктором копирования. Создать третий класс, который наследует свойства из двух классов.
C++ Считывание строк из текстового файла и создание папки
ВОзникла задача создать кучу папок с разными именами, возникла идея, что можно запихать эти названия в текстовый файл, где новая строка-имя объекта, которая послужит именем у новой папки...так вот, как на с++можно былоб это реализовать, чтобы считать строку-создать папку с именем этой строки, и так далее, пока не кончится строки? ps: думаю пример многим поможет, т.к задача хоть и нетрудная...
C++ классы http://www.cyberforum.ru/cpp-beginners/thread270974.html
доброго времени суток! кто-нибудь знает как описать класс car: марка - char, мощность - int, стоимость - float с помощью конструкторов и деструкторов.
C++ матрица Создать матрицу 3х2 найти в ней найбольший и найменьший элемент подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.04.2011, 21:38     Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем.
На тему стратегии обхода (печати). Можно замутить еще большую абстракцию путем использования шаблонного параметра списка в print-е...
Вроде бы не ошибся особо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
 
template
<
    class T
>
class LinearListImpl
{
public:
    struct Node
    {
        Node(T elem_=T()):elem(elem_), next(0), prev(0)
        {
        }
        Node* next;
        Node* prev;
        T elem;
    };
    LinearListImpl():head(0), tail(0)
    {
    }
    LinearListImpl(const LinearListImpl& other):head(0), tail(0)
    {
        for(Node* t=other.head; t; t=t->next)
            push_back(t->elem);
    }
    ~LinearListImpl()
    {
        Node* tmp=head;
        while(tmp)
        {
            head=head->next;
            delete tmp;
            tmp=head;
        }
    }
    void push_back(T elem_)
    {
        Node* t=new Node(elem_);
        if(!head)
        {
            head=t;
            tail=t;
            return;
        }
        tail->next=t;
        tail=t;
    }
    Node* head;
    Node* tail;
};
template
<
    class T
>
class NormalListPrint
{
public:
    NormalListPrint(const LinearListImpl<T>& other):impl(new LinearListImpl<T>(other))
    {
    }
    ~NormalListPrint()
    {
        delete impl;
    }
    void print()
    {
        for(typename LinearListImpl<T>::Node* node=impl->head; node; node = node->next)
            std::cout<<node->elem<<'\n';
    }
private:
    LinearListImpl<T>* impl;
};
 
template
<
    class T,
    template <class> class PrintStrategy
>
class LinearList
{
public:
    typedef PrintStrategy<T> PS;
    typedef LinearListImpl<T> LSImpl;
    LinearList():impl(LSImpl())
    {
    }
    void push_back(T elem_)
    {
        impl.push_back(elem_);
    }
    void print()
    {
        PS printer(impl);
        printer.print();
    }
private:
    LSImpl impl;
};
 
int main()
{
    LinearList<int, NormalListPrint> lst;
    lst.push_back(10);
    lst.push_back(30);
    lst.push_back(100);
    lst.push_back(15);
    lst.print();
}
 
Текущее время: 10:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru