Подтвердить что ты не робот

Сопоставление между контейнерами stl С++ и С#

Может ли кто-нибудь указать хорошее сопоставление между обычными контейнерами STL С++, такими как вектор, список, карта, множество, мультимайл... и общие контейнеры С#?

Я привык к прежним, и каким-то образом я привык выражать алгоритмы в терминах этих контейнеров. Мне сложно найти эквивалент С#.

Спасибо!

4b9b3361

Ответ 1

Здесь грубая эквивалентность:

  • Dictionary<K,V> <= > unordered_map<K,V>
  • HashSet<T> <= > unordered_set<T>
  • List<T> <= > vector<T>
  • LinkedList<T> <= > List<T>

.NET BCL (библиотека базового класса) не имеет красно-черных деревьев (stl-карта) или очередей приоритетов (make_heap(), push_heap(), pop_heap()).

Сборники .NET не используют "итераторы", как это делает С++. Все они реализуют IEnumerable<T> и могут быть повторены с использованием инструкции <foreach. Если вы хотите вручную управлять итерацией, вы можете вызвать "GetEnumerator()" в коллекции, которая вернет объект IEnumerator<T>. IEnumerator<T>.MoveNext() примерно эквивалентен "++" на итераторе С++, а "Текущий" примерно эквивалентен оператору-указателю-указателю ( "*" ).

У С# есть языковая функция, называемая итераторами. Однако они не совпадают с "объектами итератора" в STL. Вместо этого они являются языковой функцией, которая позволяет выполнять автоматическую реализацию IEnumerable<T>. Дополнительную информацию см. В документации для операторов yield return и yield break.

Ответ 2

Вы также можете взглянуть на STL/CLR, который

... представляет собой упаковку стандартная библиотека шаблонов (STL), подмножество стандартной библиотеки С++, для использования с С++ и .NET. Рамки для общего языка (CLR). С помощью STL/CLR вы можете использовать все контейнеры, итераторы и алгоритмы STL в управляемом окружающая среда.

Кроме того, имейте в виду, что вы можете скомпилировать свой существующий код С++/STL с помощью флага /clr.

Ответ 4

Нет никакого прямого прямого сопоставления, так как, например, С++ и компараторы используют компараторы, тогда как .Net HashSet и Dictionary используют хэш-коды.