Форум программистов, компьютерный форум, киберфорум
Наши страницы

Освобождение памяти от циклического списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужна максимальная скорость программы http://www.cyberforum.ru/cpp-beginners/thread500195.html
Нужна максимальная скорость программы (сложение, сравнение целочисленных переменных, в том числе лежащих в Byte массивах и пр. похожие операции). На каком языке какой версии это лучше делать?
C++ Как сделать диалог, который сам появляется и исчезает привет всем! как сделать диалоговое окно, которое само появляется (то есть НЕ при нажатии на кнопку или пункт меню), а отобразив то, что нужно, само исчезает (без всяких кнопок ОК или CANCEL)??... http://www.cyberforum.ru/cpp-beginners/thread500189.html
Литаретура по созданию драйверов. C++
Hi! хочу заняться написанием драйвером для устройств. Какую литературу Вы можете посоветовать, для начинающего, чтобы там описывалось, что такое порты, как определить какие порты использует...
Проблема с методом OnOk для диалогового окна C++
Привет всем. Метод OnOk для диалогового окна свой радной. Я использовала OK для вызыва другого диалогового окна который содержит кнопки OK и Cancel. Хотела чтоб OK закрывал главное окно программы, а...
C++ Activex-компонент Spreadsheet http://www.cyberforum.ru/cpp-beginners/thread500089.html
Создал MDI-ое приложение. В каждом дочернем окне у меня создается компонент Spreadsheet (класс CSpreadsheet1). Этот ActiveX компонент является Excel таблицой. Связал с ним переменную - получил доступ...
C++ выделение и копирование в Word Доброго времени суток! Пожалуйста подскажите как сделать несколько действий с MS Word''om: 1. Выделить текст весь текст из одного документа (заполненая таблица в out.doc) 2. Скопировать его... подробнее

Показать сообщение отдельно
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
09.12.2011, 01:41
petrovich1, несколько размышлений по дизайну твоего приложения:

* у тебя уже есть динамический контейнер: vector, если твоя задача - затолкать в контейнер все строки из файла в виде экземпляров класса Item, то зачем тебе организовывать список? просто забивай в вектор и все, элементы в векторе будут располагаться в том порядке в каком ты их туда затолкал если использовался метод push_back.

* если у тебя задание организовать элементы именно в виде списка, или ты знаешь, что тебе точно потребуется быстрая вставка новых элементов, в особенности вставка между уже существующими элементами (это единственное преимущество списка перед вектором), то в STL уже есть предназначенный для этого шаблон: list.

* если у тебя задание организовать свой собственный лист, то ты делай это полностью самостоятельно, твой класс Item уже имеет все необходимое для организации простого одно-направленного листа (точнее стека, потому как элементы ссылаются на родителя, то есть предыдущий элемент). На вскидку класс списка выглядел бы следующим образом (не компилировал, поэтому не гарантирую что будет работать сходу):
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
class CItem 
{
public:
    // Переменные
    CItem* p_parentItem;
    CString m_Name;
    CString m_Family;
    // Методы
    CItem(void);
    CItem(CString& name, CString& family)
    {
        m_Name = name;
        m_Family = name;
    };
    
    ~CItem(void);
} 
 
class CList
{
protected:
    CItem* m_pLast;
 
public:
    CList()
    {
        m_pLast = NULL
    };
    
    ~CItem()
    {
        // Self cleaning
        CItem* pItem = m_pLast;
        while (pItem != NULL)
        {
            CItem* pParent = pItem->p_parentItem;
            delete pItem;
            pItem = pParent;
        }
    }
    
    void Insert(CItem* pItem)
    {
        pItem->p_parentItem = m_pLast;
        m_pLast = pItem;
    }
    
    void Insert(CString& name, CString& family)
    {
        Insert(new CItem(name, family));
    }
    
    int Size()
    {
        int result = 0;
        CItem* pItem = m_pLast;
        while (pItem != NULL)
        {
            pItem = pItem->p_parentItem;
            result++;
        }
        return result;
    }
    
    CItem* GetLast()
    {
        return m_pLast;
    }
    
    CItem* GetFirst()
    {
        if (m_pLast == NULL)
        {
            return NULL;
        }
        
        CItem* pItem = m_pLast;
        while (pItem->p_parentItem != NULL)
        {
            pItem = pItem->p_parentItem;
        }
        
        return pItem;
    }
    
    CItem* FindByName(CString& name)
    {
        CItem* pItem = m_pLast;
        
        while (pItem != NULL)
        {
            if (pItem->m_Name == name)
            {
                return pItem;
            }
            pItem = pItem->p_parentItem;
        }
        
        return NULL;
    }
    
    // And so so on
}
С уважением,
Владимир
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.