![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Killerman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Кто знает, какие классы из STL или может каких то других библиотек есть для Win32 вместо .NET-ских Hastable, Dictionary и т.д.
классы map<> и set<> из STL не устраивают. И немного напрягает работа с итераторами. То, что для .NET-ских классов выглядит как простой вызов функции, для STL классов превращается в длинную писанину. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
STL для Win32 ?! это что-то новенькое.
http://www.cplusplus.com/reference/stl/ вот перечень контейнеров -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 2 Всего: 36 |
Killerman,
какие классы из STL без итераторов - никакие. классы map<> и set<> из STL не устраивают. тогда делать свои поделки |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
дак и в .net тоже итераторы есть (IEnumerable или IEnumerable<T> почти наследуются все коллекции тамошние)...
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 2 Всего: 36 |
jonie,
дак и в .net тоже итераторы есть т-с-с-с! а то спугнёшь |
|||
|
||||
| Killerman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
jonie,
дак и в .net тоже итераторы есть Есть, но их не нужно использовать явно. А класс hashtable я вообще не нашел для Win32. Я просто подумал. может есть какая то дополнительная библиотека независимых разработчиков.... Это сообщение отредактировал(а) Killerman - 23.6.2009, 10:30 |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Killerman, а чем конкретно стандартные map и set не устраивают?
boost::intrusive::hashtable
Boost.Intrusive -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
используй boost foreach, либо алгоритмы
Это сообщение отредактировал(а) Lazin - 23.6.2009, 10:59 |
|||
|
||||
| Killerman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
W4FhLF
Killerman, а чем конкретно стандартные map и set не устраивают? Ну тем, что все оно какое то роботское. К примеру в map нельзя проверить, что елемент какой то не существует через: map<int, char,ltd::less<int>> m1; if(map[10] ==NULL) //error Через map[10] можно только изменить значение, но не вывести результат. Получается мне нужно сначала создать итератор:
Ну короче ясно о чем я. Или еще такой прикол, к примеру мне нужно динамически создать список, ну вот так: std::deque<int> * s1 = new std::deque<int>; поработать с нима, потом обратиться к элементу 10-ть этого списка. Для этого приходится делать так: (*s1)[10]; //выглядит не очень читабельно. Все усложняется, когда эти конструкции более вложенные: Бывает и такое: (*list1[i])[j]; и такое: nd->SetAtributes("F1", new BitArray(*((BitArray*)nd->Childs()[0]->GetAtributes("F1")))); И иногда вспоминаешь С#, где просто обращаешся через всю иерархию классов через простую точку: с1.с2[i].c3.c4.................. А де этот boost скачать? |
|||
|
||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Добавлено через 1 минуту и 27 секунд
Добавлено через 2 минуты и 37 секунд А такие конструкции, как правило, связаны с ошибками архитектуры и проектирования. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| Killerman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
C ->at(10) это да. Немного удобнее. Но по поводу архитектуры не согласен.
Просто если конструкция не очень сложная, то все рабоает неплохо. А когда задача усложняется, то Win32 начинает очень заметно проигрывать Net-у в читабельности и быстроте написания. Особенно заметно это для объектов с динамически-выделяемой памятью. |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Оно и для сложных неплохо работает
Тогда будет все нормально |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Killerman
Перечитал все, так и не понял в чем проблема? Чем тебе не нравится STL? Не нравится интерфейс, стиль или названия функций, пиши свой адаптер. Хотя неправильно это. Я бы на твоем месте послушал этого совета
|
|||
|
||||
| Killerman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
xvr
А вот этого (динамической памяти) в С++ (по сравнению с C#) должно быть гораздо меньше Тогда будет все нормально azesmcar Перечитал все, так и не понял в чем проблема? Чем тебе не нравится STL? Ну я в принципе согласен, что динамической памяти надо бы по меньше. Но мне кажется это самообман. Ведь даже те же списки последовательностей (list, vector, deque, ) а также map, set.... - это ни что иное, как динамическая память. У меня задача такая, использовать map map-ов, или map vector-ов, или vector vector-ов. Получается, я не могу динамически не выделять 2-й компонент, как к примеру: map<int,map<int,string>> mapofmap; Конечно можно было бы оставить так, но в таком случае при добавлении нового элемента в mapofmap все данные должны копироваться из вложенного map-а: map<int,string> m1; m1.insert(5, "ssss"); // так нельзя, но мне лень расписывать mapofmap.insert(7, m1); // НЕЯВНО выделяется динамическая память в mapofmap и идет копирование из m1 в элемент mapofmap Поэтому я использую map<int,map<int,string>*> mapofmap; Тогда получается ЯВНАЯ динамическая память. map<int,string>* m1 = new map<int,string>; mapofmap.insert(7, m1); // копируется только указатель. К тому же последний вариант иногда более предпочтителен, чтобы не множить одни и те же данные. Если можно сделать проще, скажите как. Это сообщение отредактировал(а) Killerman - 23.6.2009, 13:57 |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
можешь,
но я что-то плохо себе представляю ситуацию в которой такое может понадобиться. Добавлено через 1 минуту и 7 секунд
т.е. ты имеешь ввиду - чем больше динамически выделяемой памяти - тем хуже? Я ты попробуй несколько мегабайт в стеке выделить - тогда поговорим. и что значит ? |
||||||
|
|||||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |