#.net
#.net
Вопрос:
Я знаю об этой системе.Коллекции.Стек. Я ищу класс, который поддерживает PushFront () и PushBack().
Комментарии:
1. Я уверен, что если бы он существовал, вы бы нашли его в пространстве имен collections.
2. То, что вы называете стеком , таковым не является, если оно поддерживает push back.
Ответ №1:
Почему бы просто не использовать / wrap LinkedList<T>
? У него есть методы AddFirst
и AddLast
. Вы можете обернуть его, чтобы скрыть AddBefore
и т.д. методы.
Общий термин для этого — deque (это означает очередь с двойным завершением). Если по какой-то причине обертывания LinkedList<T>
недостаточно (а должно быть!), вы могли бы взглянуть на реализацию неизменяемого deque Эрика Липперта.
Ответ №2:
Звучит так, как будто вам нужно что-то, что обычно называется deque. Самый близкий, о котором я знаю в .NET, это LinkedList<T>
. Я не верю, что существует класс, созданный из циклического буфера (расширяющийся по мере необходимости), который, вероятно, вы хотели бы создать с нуля.
Конечно, вы могли бы реализовать это самостоятельно, но я бы, вероятно, использовал LinkedList<T>
, если бы у меня не было действительно веской причины не делать этого. У Эрика Липперта также есть неизменяемая реализация, на которую вы могли бы взглянуть (см. Его сообщение в блоге, посвященное этому), но, очевидно, вы хотели бы написать кучу тестов и т.д. … И вы можете не хотеть неизменяемый.
Комментарии:
1. им следует подумать о переименовании этого сайта в askjonskeet.com
Ответ №3:
То, что вы ищете, — это deque. Вот пример:http://www.codeproject.com/KB/recipes/deque.aspx
Ответ №4:
Почему бы не использовать LinkedList<T>
? Он позволяет добавлять в начало, конец и в любое промежуточное место. Если вы не хотите предоставлять некоторые из LinkedList<T>
методов, вы всегда можете обернуть его и предоставить только те методы, которые вы хотите предоставить.