c # эквивалент для вектора c ++ или deque

18

Я почти уверен, что это должен быть дубликат, но я искал какое-то время и не мог найти ответ. Что мне следует использовать в C # для замены вектора C ++ и deque эффективно . То есть мне нужна структура, которая поддерживает прямое индексирование эффективно, а также поддерживает удаление с одного или обоих концов (в зависимости от вектора или случая дека) в эффективном режиме.

В java я обычно использую ArrayList хотя бы для вектора, но для C # я нашел этот источник , который гласит: %код%. Итак, каков новый способ сделать это? И снова, что я делаю для дела deque?

    
задан Ivaylo Strandjev 24.03.2013 в 14:39
источник
  • Одним из вариантов является github.com/dcastro/DequeNET –  Drew Noakes 08.01.2018 в 17:50

3 ответа

16

Нет встроенного контейнера Deque, но доступно несколько реализаций.

Вот хороший от Стивена Клири . Это обеспечивает операции O (1) для индексации, а также для вставки в начале и добавления в конце.

C #, эквивалентный Vector, List<T> . Индексированный доступ - O (1), но вставка или удаление - O (N) (кроме Inserting в конце, который является O (1)).

    
ответ дан Matthew Watson 24.03.2013 в 14:43
  • Насколько эффективна операция индексирования в списке? Я думал, что он просто перебирает список –  Ivaylo Strandjev 24.03.2013 в 14:45
  • @IvayloStrandjev это не двойной список, это вектор. –  wRAR 24.03.2013 в 14:47
  • @Ivaylo: Нет, это не связанный список, это оболочка вокруг массива, поэтому индексирование просто использует индекс для прямого доступа к базовому массиву, поэтому это операция O (1). (Почти такой же, как вектор C ++) –  Matthew Watson 24.03.2013 в 14:47
  • @MatthewWatson, пожалуйста, уточните O (N) или O (1), ваш комментарий, кажется, противоречит самому себе –  Ivaylo Strandjev 24.03.2013 в 14:48
  • Вставка - это O (N), когда элемент вставлен посередине, O (1), если на конце (обычно) –  BlackBear 24.03.2013 в 14:55
Показать остальные комментарии
8

Для C # vector хорошим кандидатом является System.Collection.Generic.List , как упоминалось выше.
Самый близкий к deque в C ++ будет System.Collection.Generic.LinkedList , который является двусвязным списком.     

ответ дан Dale Wick 28.11.2014 в 18:37
  • +1, Связанный список выглядит как лучшее решение deque, если вам не нужно обращаться к элементам посередине. –  DCShannon 02.07.2015 в 20:03
  • Рекомендация LinkedList как замена deque неверна и неточна. Они совершенно разные звери (без смежного распределения в первом) и абсолютно не заменяемы. –  Mahmoud Al-Qudsi 23.06.2017 в 04:53
3

Рассмотрим System.Collections.Generic.List и другие из System.Collection.Generic , они выполняют ту же цель, что и их эквиваленты C++ .
Кроме того, для вас может быть больше контейнеров. Посмотрите здесь .

    
ответ дан bash.d 24.03.2013 в 14:42
  • Общие, а не общие –  wRAR 24.03.2013 в 14:43
  • @wRAR Слишком верно! Спасибо, я всегда смешиваю это –  bash.d 24.03.2013 в 14:43
  • Это Deque или Dequeue? Кажется, я ничего не могу найти о Дике. Не меня к downvote кстати. –  Ivaylo Strandjev 24.03.2013 в 14:44
  • Я ошибался в Deque, но список есть ... –  bash.d 24.03.2013 в 14:46