STL
От: Kreont Эстония  
Дата: 27.03.02 14:40
Оценка:
Написал класс обслуживающий массив из элементов типа простой структуры.
Функций мемберов не так много ... найти элемент по заданному полю структуры.. добавить , удалить и ошибки отслеживать. Вроде всё. В программе класс конструируется точно один раз и необходим для многих функции.
Стоит ли использовать list.h вместо этого класса ? Переделать не лень — главное чтоб рационально было всё и красиво.

Подскажите чтонить.
The life will soon come to end...
Re: STL
От: Bell Россия  
Дата: 27.03.02 15:12
Оценка:
Здравствуйте Kreont, Вы писали:

K>Написал класс обслуживающий массив из элементов типа простой структуры.

K>Функций мемберов не так много ... найти элемент по заданному полю структуры.. добавить , удалить и ошибки отслеживать. Вроде всё. В программе класс конструируется точно один раз и необходим для многих функции.
K>Стоит ли использовать list.h вместо этого класса ? Переделать не лень — главное чтоб рационально было всё и красиво.

K>Подскажите чтонить.


Конечно предпочтительнее использовать какой-нибудь контейнер из STL, тем более что нет нет специфических требований. А какой именно контейнер использовать — зависит от конкретных требований. Из приведенного текста не очень понятны функции, которые возлагаются на ваш контейнер. Был бы код, можно было что0то более конкретное посоветовать...

Да, и если хочется использовать именно std::list<T>, то нужно брать его из <list>, а не из <list.h>
Любите книгу — источник знаний (с) М.Горький
Re[2]: STL
От: Kreont Эстония  
Дата: 27.03.02 16:29
Оценка:
Здравствуйте Bell, Вы писали:

B>Здравствуйте Kreont, Вы писали:


K>>Написал класс обслуживающий массив из элементов типа простой структуры.

K>>Функций мемберов не так много ... найти элемент по заданному полю структуры.. добавить , удалить и ошибки отслеживать. Вроде всё. В программе класс конструируется точно один раз и необходим для многих функции.
K>>Стоит ли использовать list.h вместо этого класса ? Переделать не лень — главное чтоб рационально было всё и красиво.

K>>Подскажите чтонить.


B>Конечно предпочтительнее использовать какой-нибудь контейнер из STL, тем более что нет нет специфических требований. А какой именно контейнер использовать — зависит от конкретных требований. Из приведенного текста не очень понятны функции, которые возлагаются на ваш контейнер. Был бы код, можно было что0то более конкретное посоветовать...


B>Да, и если хочется использовать именно std::list<T>, то нужно брать его из <list>, а не из <list.h>


class CClientData {
public:
CAsyncSocket* psock;
CString strIP;
CDatabase* pdb;
}

я организовываю работу серверного приложения и каждое подключение должно хранить 3 типа данных. Так как клиенты отключаются и вновь подсоединяются надо динамический контейнер пользовать, с возможностью поиска и удалить/добавить элемент.
Решил использовать <list>.
Почему вот нельзя объявить list<CClientData> m_cl; как член класса основного диалога??
VC ругается что мол шаблоны мемберами не могут быть.
The life will soon come to end...
Re: STL
От: Ли Влад  
Дата: 28.03.02 00:24
Оценка:
Здравствуйте Kreont, Вы писали:

K>Написал класс обслуживающий массив из элементов типа простой структуры.

K>Функций мемберов не так много ... найти элемент по заданному полю структуры.. добавить , удалить и ошибки отслеживать. Вроде всё. В программе класс конструируется точно один раз и необходим для многих функции.
K>Стоит ли использовать list.h вместо этого класса ? Переделать не лень — главное чтоб рационально было всё и красиво.

K>Подскажите чтонить.


ИМХО Если уже написал свой класс юзай его... свои ошибки искать все же легче чем чужие.
Re[3]: STL
От: Зазнобин Василий Россия  
Дата: 28.03.02 07:35
Оценка:
Здравствуйте Kreont, Вы писали:

K>Почему вот нельзя объявить list<CClientData> m_cl; как член класса основного диалога??

K>VC ругается что мол шаблоны мемберами не могут быть.

А ручками вставлять list<CClientData> m_cl; не пробовали....... :)
Re[3]: STL
От: Bell Россия  
Дата: 28.03.02 07:38
Оценка:
Здравствуйте Kreont, Вы писали:

K>Решил использовать <list>.

Да, для твоей задачи list вполне подойдет.

K>Почему вот нельзя объявить list<CClientData> m_cl; как член класса основного диалога??

K>VC ругается что мол шаблоны мемберами не могут быть.

Ручками попробуй написать, и не забыть std:

#include <list>

std::list<CClientData> m_cl
Любите книгу — источник знаний (с) М.Горький
Re: STL
От: Юнусов Булат Россия  
Дата: 28.03.02 07:55
Оценка:
Здравствуйте Kreont, Вы писали:

K>Написал класс обслуживающий массив из элементов типа простой структуры.

K>Функций мемберов не так много ... найти элемент по заданному полю структуры.. добавить , удалить и ошибки отслеживать. Вроде всё. В программе класс конструируется точно один раз и необходим для многих функции.
K>Стоит ли использовать list.h вместо этого класса ? Переделать не лень — главное чтоб рационально было всё и красиво.

K>Подскажите чтонить.


Есть забавный момент — если нужно находить в контейнере элемент по заданному полю его структуры то изячнее использовать
std::map < поле_структуры_по_которому_будем_искать, СТРУКТУРА >
Re[2]: STL
От: Юнусов Булат Россия  
Дата: 28.03.02 08:50
Оценка:
Здравствуйте Юнусов Булат, Вы писали:

Описка
ЮБ>std::map < поле_структуры_по_которому_будем_искать, СТРУКТУРА >
std::map < тип_поля_структуры_по_которому_будем_искать, СТРУКТУРА >

Что то такое я имел в виду
#include <string>
#include <map>
#include <iostream>

class Foo
{
public:
    Foo() {};
    Foo(std::string ip, int data);
    virtual ~Foo() {}
    std::string m_ip;
    int m_data;
};

std::map < std::string, Foo > g_ipMap;
Foo::Foo(std::string ip, int data) : m_ip(ip), m_data(data)
{
    g_ipMap[m_ip] = *this;
}

int main(int argc, char* argv[])
{
    Foo f0("255.255.255.0", 7);
    Foo f1("127.0.0.0", 8);

    std::cout << g_ipMap["255.255.255.0"].m_data << std::endl;
    // тут лучше пользоватся map::find

    g_ipMap.clear();
    return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.