Переключение на Главную Страницу Страницы: [1] 2 3 ... 9 ОтправитьПечать
Очень популярная тема (более 25 ответов) Коллекции в 1С++ (число прочтений - 49231 )
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Коллекции в 1С++
04. Июля 2008 :: 06:26
Печать  
По мотивам обсуждения вот тут.
ЕМНИП, класс Структура был оптимизирован Михаилом для хранения большого количество элементов и регистронезависимого сравнения ключей.
Это, конечно, хорошо для некоторых задач.
Предлагаю обсудить создание настраиваемого класса-коллекции с возможностью выбирать его поведение.

Интерфейс примерно такой:
Код
Выбрать все
Колл=СоздатьОбъект("Коллекция");
Колл.УстановитьТипКлюча(0);//0-число, 1 -строка, 2- строка с регистронезависимым сравнением, 3- еще что-то
Колл.УстановитьМодельХранения(0);//0-вектор, 1- хеш-таблица, 2 - список, 3-еще что-то
 


Например для задач, для которых критична скорость вставки в середину коллекции выбирать список, и т.п.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Коллекции в 1С++
Ответ #1 - 04. Июля 2008 :: 06:34
Печать  
А индексированная таблица не спасает?
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #2 - 04. Июля 2008 :: 06:38
Печать  
У индексированной таблицы довольно дорогие операции создания таблицы, создания колонок, добавление строк.
Если Ускоренное создание объектов в 1С нормально заработает, одна проблема отпадет.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #3 - 04. Июля 2008 :: 07:13
Печать  
УстановитьМодельХранения - это безусловно тонкий и нужный инструмент.
только глобального толку думаю мало будет. подавляющее число 1с-ников не работают на таком уровне (вплоть все до мелочей...).
  
Наверх
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Коллекции в 1С++
Ответ #4 - 04. Июля 2008 :: 07:17
Печать  
trdm писал(а) 04. Июля 2008 :: 07:13:
УстановитьМодельХранения - это безусловно тонкий и нужный инструмент.
только глобального толку думаю мало будет. подавляющее число 1с-ников не работают на таком уровне (вплоть все до мелочей...).

Мало, но есть  Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Коллекции в 1С++
Ответ #5 - 04. Июля 2008 :: 08:32
Печать  
steban

Степ, поддержу здесь Степанова в том плане, что не получится сделать единую коллекцию и не будет единого интерфейса.
Ибо все коллекции того же STL (а их вполне можно взять за основу) - разные.

Даже итераторы для листа нельзя сравнивать на <>, только на == и !=, а для вектора, к примеру, можно.
И это правильно.

К примеру, как будет работать предлагаемая коллекция, у которой ТипКлюча == число, а МодельХранения == список?
Если она не будет работать, то теряет смысл общий интерфейс.
Если она будет работать, но с затратами N - то это уже совсем плохо.

Таким образом, думаю, надо просто определиться, какие коллекции нам нужны.
Мне лично не хватает одной - единственной коллекции, о которой я вчера уже упомянул.

Это вектор, заодно индексированный строкой ("ИменованныйВектор").
Можно будет использовать вместо структуры и СЗ, в том числе во множестве мест в ИТ.
Прост в реализации, может вырождаться в просто "Вектор", если задавать пустые ключи, к примеру.
Прост в применении, ибо жестко не требует наличия итераторов, достаточно индексов.
Для реализации в icpp уже есть все, что нужно (CIStringMap/std::vector (или std::deque)).
И т.д.

Именованный вектор также можно использовать как hash_set / hash_map.
В принципе, структура - это по-сути и есть hash_map.

Конечно, есть задачи, где требуется вставка и удаление в начало (deque это решает), или в середину.
Над списками и прочим можно еще подумать.
Но еще интереснее подумать над алгоритмами, которые можно будет к этим контейнерам применить.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Коллекции в 1С++
Ответ #6 - 04. Июля 2008 :: 08:34
Печать  
PVR писал(а) 04. Июля 2008 :: 07:17:
trdm писал(а) 04. Июля 2008 :: 07:13:
УстановитьМодельХранения - это безусловно тонкий и нужный инструмент.
только глобального толку думаю мало будет. подавляющее число 1с-ников не работают на таком уровне (вплоть все до мелочей...).

Мало, но есть  Улыбка

Однажды я сделал контейнер, у которого есть метод "Сдвинуть".
Реализовано на базе алгоритма STL "rotate".

Тогда я подумал: не вынести ли сам rotate в интерфейс коллекции, ибо "сдвинуть" - это всего лишь микроскопическая частичка "rotate".
И... как то не стал этого делать... Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #7 - 04. Июля 2008 :: 08:44
Печать  
Блин, лучше сделайте в 1С++ закладки и панель инструментов, не зависимые от офисов и прочей хрени Улыбка
А структура сейчас достаточно хорошо работает, её хватает Улыбка.
  
Наверх
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #8 - 04. Июля 2008 :: 08:50
Печать  
kms писал(а) 04. Июля 2008 :: 08:32:
Таким образом, думаю, надо просто определиться, какие коллекции нам нужны.
Мне лично не хватает одной - единственной коллекции, о которой я вчера уже упомянул.

Это вектор, заодно индексированный строкой ("ИменованныйВектор").
Можно будет использовать вместо структуры и СЗ, в том числе во множестве мест в ИТ.
Прост в реализации, может вырождаться в просто "Вектор", если задавать пустые ключи, к примеру.
Прост в применении, ибо жестко не требует наличия итераторов, достаточно индексов.
Для реализации в icpp уже есть все, что нужно (CIStringMap/std::vector (или std::deque)).

Мне пока достаточно просто вектора Улыбка
ОК. давай решать проблемы по мере их поступления.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #9 - 04. Июля 2008 :: 08:51
Печать  
trdm писал(а) 04. Июля 2008 :: 08:44:
А структура сейчас достаточно хорошо работает, её хватает Улыбка.

Для некоторых задач недостаточно хорошо
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Коллекции в 1С++
Ответ #10 - 04. Июля 2008 :: 09:22
Печать  
steban писал(а) 04. Июля 2008 :: 08:50:
Мне пока достаточно просто вектора Улыбка
ОК. давай решать проблемы по мере их поступления.

Нуу. Вот так всегда...
А как хорошо все начиналось. Смех

Ну, если бы мера была бы далеко, я бы не выступал по этому вопросу. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Коллекции в 1С++
Ответ #11 - 04. Июля 2008 :: 09:26
Печать  
trdm писал(а) 04. Июля 2008 :: 08:44:
Блин, лучше сделайте в 1С++ закладки и панель инструментов, не зависимые от офисов и прочей хрени Улыбка
А структура сейчас достаточно хорошо работает, её хватает Улыбка.

Дык это очень просто.
Я перестал заморачиваться и начал юзать ТП с плоской границей.
Только, кажется, я не до конца еще в CVS это залил.
Значит, будет.

А вот с коллекциями - мне не нравится то, что делал Deb.
Все, что можно было переделать, уже переделали.
Мне даже не нравится Делегат, который когда-то вполне нравился.

Все потому, что в свое время Deb шарашил не заботясь об интерфейсе.
А надо было слушать Палыча, и только потом брать в руки перфоратор.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #12 - 04. Июля 2008 :: 10:08
Печать  
kms писал(а) 04. Июля 2008 :: 09:26:
Дык это очень просто.
Я перестал заморачиваться и начал юзать ТП с плоской границей.
Только, кажется, я не до конца еще в CVS это залил.
Значит, будет.

Это ты про закладки? или Панель инструментов?

Очень хотелось бы поиметь возможность создавать панель инструментов или ее аналог на родном месте. Чтобы не пришлось программно двигать атрибуты на форме и менять ее размер.

P.S. Попытки в этом направлении уже были на форуме. Но мне не нравится реализация
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Коллекции в 1С++
Ответ #13 - 04. Июля 2008 :: 10:16
Печать  
kms писал(а) 04. Июля 2008 :: 09:26:
trdm писал(а) 04. Июля 2008 :: 08:44:
Блин, лучше сделайте в 1С++ закладки и панель инструментов, не зависимые от офисов и прочей хрени Улыбка
А структура сейчас достаточно хорошо работает, её хватает Улыбка.

Дык это очень просто.
Я перестал заморачиваться и начал юзать ТП с плоской границей.
Только, кажется, я не до конца еще в CVS это залил.
Значит, будет.


Могу назвать много причин невозможности (ну лично для меня) такого перехода... но боюсь не по теме... вполне поддерживаю trdm в необходимости создания панели и закладок... вот реализовал же Chieftain панель управления, однако на дельфи... правда тема как то затерялась.
Кстати Миша, я там счас в ТП одну хотелку накидаю может она тебе интересной покажется.
А плоская граница в ТП есть в текущей сборке... и намано работает огромное спасибо  Подмигивание Правда там тоже есть пара "но" ... но я в другую тему пошел  Подмигивание

Пы.Сы. Арта оказался проворнее  Смех
Пы.Сы.2 Прошу прощения Chieftain конечно же... ошибся в нике
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #14 - 04. Июля 2008 :: 10:37
Печать  
Народ, Не уходим от темы.

Михаил, поясни по ИменованныйВектор подробнее, как ты планируешь сделать одновременный доступ по индексу и строке, что-то не пойму.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 9
ОтправитьПечать