Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Контейнеры в C#

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа!
 
В C# есть "коллекции" с заманчивыми названиями типа List, Queue, Stack. Является ли List списком в том смысле, в котором его понимают Кнут и Страуструп, т. е. контейнер, в котором вставка есть O(1), а доступ --- O(n), или это нечто от Microsoft с неизвестными характеристиками? И еще: какая сортировка в них используется?

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 18:16 17-08-2005
oSLikus

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Насчёт сложности вставки/получения не знаю. Сортировка делается для массивов, насколько я знаю (статические метода класса System.Array).

Всего записей: 82 | Зарегистр. 14-12-2004 | Отправлено: 23:35 17-08-2005
z2Rus

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не все не так просто и найти материал по поводу внутреннего устройства их коллекций не просто, но как не странно у меня есть книженция где вкользь об этом упоминается.
Лень сейчас искать дословно, но суть в том, что название коллекции никак не отражает ее внутреннюю структуру. Кроме того многие коллекции портированны из STL library. Так, ArrayList инкапсулирует в себе обычный нединамический массив его внутренняя реализация копирует vector из STL. А SortedArrayList основан на хэш-таблице. Мало того, есть гибридные коллекции, которые хранят небольшое количество элементов в виде массива, но по мере заполнения могут поменять свою внутреннюю структуру. Короче .NET есть все, нет только того, что ты хотел - ни одна коллекция не использует и связанного списка, нет ее и в явном виде, возможно с релизом 2.0 что-то изменится.

Всего записей: 14 | Зарегистр. 01-09-2004 | Отправлено: 04:41 18-08-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oSLikus
z2Rus
Иными словами, "не верь глазам своим". Copyright (C) Козьма Прутков.
 
А есть ли нечто более удобное, чем "перечислители"? Например, итераторы?

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 08:57 18-08-2005
oSLikus

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Чем перечислители не угадили тебе? Не нравится конструкция foreach() {}? Фактически перечислитель - это и есть итератор примитивный (идёт от начала к концу). Другого нет (в версии 1.1)

Всего записей: 82 | Зарегистр. 14-12-2004 | Отправлено: 12:05 18-08-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oSLikus

Цитата:
Чем перечислители не угадили тебе?  

Удивительнейшей кривизной синтаксиса по сравнению с итераторами.
 
Добавлено:
И зачем они нужны, если есть foreach?

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 12:37 18-08-2005 | Исправлено: TheChampion, 12:39 18-08-2005
oSLikus

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
учим матчасть? Для того, чтобы работал foreach, необходимо, чтобы класс наследовался от интерфейса Enumerable, который, в свою очередь, возвращает объект IEnumerable (перечислитель), у которого нужно реализовывать методы Reset(), MoveNext(), свойство Current. Фактически, то же самое, что и в java и С++ обычный итератор (не произвольного доступа, не обратный, а нормальный прямой - с начала до конца коллекции идёт).
 
Random Access итератор незачем, я думаю, в C#, так как можно переопределить [] и тебе будет по индексу возващаться элементы, как будто бы твой класс массив.
 
В общем, непривычно (как, видимо, в твоём случае) не значит, что криво.

Всего записей: 82 | Зарегистр. 14-12-2004 | Отправлено: 23:36 18-08-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oSLikus

Цитата:
учим матчасть?

Немного. Я предпочитаю Managed C++, поэтому меня гораздо больше интересует .NET Framework, нежели C# как таковой.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 08:39 19-08-2005
oSLikus

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Флаг в руки, как говориться Но совет: лучше писать на главном языке платформы, чем на модифицированном для платформы. Имхо, конечно же.

Всего записей: 82 | Зарегистр. 14-12-2004 | Отправлено: 05:00 20-08-2005
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Контейнеры в C#


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru