Oto szorstki równoważność:
Dictionary<K,V>
< =>unordered_map<K,V>
HashSet<T>
< =>unordered_set<T>
List<T>
< =>vector<T>
LinkedList<T>
< =>list<T>
.NET BCL (biblioteka klasy podstawowej) nie ma drzewek czerwono-czarnych (mapa STL) ani kolejek priorytetów (make_heap(), push_heap(), pop_heap()).
. Kolekcje .NET nie używają "iteratorów" tak jak to robi C++. Wszystkie implementują IEnumerable<T>
i mogą być iterowane przy użyciu instrukcji "foreach
". Jeśli chcesz ręcznie sterować iteracją, możesz wywołać "GetEnumerator()
" w kolekcji, która zwróci obiekt IEnumerator<T>
. IEnumerator<T>.MoveNext()
jest mniej więcej równoznaczne z "++" na iteratorze C++, a "Current" jest mniej więcej równoznaczne z operatorem wskazującym na wskaźnik ("*").
C# ma funkcję językową o nazwie "iteratory". Nie są jednak tym samym, co "obiekty iteracyjne" w STL. Zamiast tego są one funkcją językową, która umożliwia automatyczną implementację IEnumerable<T>
. Więcej informacji można znaleźć w dokumentacji instrukcji yield return
i yield break
.
Natknąłeś się na najprawdopodobniej największą wadę biblioteki .NET klasy podstawowej ...Brakuje im wielu stosunkowo popularnych kontenerów. I podczas gdy LINQ ma przyzwoitą pracę zastępowania iteratorów w C++, nadal nie jest tak elastyczny (lub efektywny). – jalf