web-dev-qa-db-fra.com

c # équivalent pour le vecteur c ++ ou deque

Je suis presque certain que cela devrait être un double, mais j'ai cherché pendant un certain temps et je n'ai pas trouvé la réponse. Que dois-je utiliser en C # pour remplacer le vecteur C++ et deque efficacement . C'est-à-dire que j'ai besoin d'une structure qui prend en charge efficacement l'indexation directe et prend également en charge la suppression à une ou aux deux extrémités (en fonction du vecteur ou du cas de deque) de manière efficace.

Dans Java J'utilise habituellement ArrayList au moins pour le vecteur mais pour C # j'ai trouvé cette source qui déclare: ArrayList resizes dynamically. As elements are added, it grows in capacity to accommodate them. It is most often used in older C# programs.. Alors, quelle est la nouvelle façon de faire cela? Et encore une fois que dois-je faire pour le cas deque?

24
Ivaylo Strandjev

Il n'y a pas de conteneur Deque intégré, mais plusieurs implémentations sont disponibles.

Voici n bon de Stephen Cleary . Cela fournit O(1) opérations à indexer et aussi à insérer au début et à ajouter à la fin.

L'équivalent C # de Vector est List<T> . L'accès indexé est O (1), mais l'insertion ou la suppression est O(N) (autre que Insertion à la fin, qui est O (1)).

18
Matthew Watson

Pour un C # vector, un bon candidat est System.Collection.Generic.List comme d'autres l'ont mentionné.
Le plus proche du deque en C++ serait System.Collection.Generic.LinkedList qui est une liste doublement liée.

9
Dale Wick

Considérer System.Collections.Generic.List et autre de System.Collection.Generic ils servent le même but que leur C++ équivalents.
De plus, il peut y avoir plus de conteneurs pour vous. Regardez ici .

3
bash.d

Bien que vous ne puissiez pas effectuer d'opération d'indexation, la liste liée est probablement l'une des plus proches pour implémenter le retrait de la file d'attente en premier et le retrait de la file en dernier en temps constant.

https://docs.Microsoft.com/en-us/dotnet/api/system.collections.generic.linkedlist-1.removefirst?view=netframework-4.8

0
re3el