.net контейнеры не поддерживают итераторы в стиле C ++. Единственное, что у них есть, это
- простой прямой итератор с именем
IEnumerator<T>
- , который не может изменить коллекцию
- не случайный доступ
- не может быть скопировано (некоторые коллекции имеют итераторы типов значений, которые можно копировать, но это непростая задача и редко используется)
- и в большинстве коллекций также становится недействительным при каждом изменении коллекции
Практически единственное, что они могут сделать, - это повторяться в операторе foreach
.
Возможно, вы захотите взглянуть на интерфейс IList<T>
, который допускает произвольный доступ, но поддерживается только в коллекциях, которые поддерживают быструю индексацию. В такой коллекции вы можете реализовать сортировку слиянием на месте, используя индексы.
void Merge<T>(IList<T> container,int left, int right, int leftEnd, int rightEnd, int full)
и затем используйте container[left]
вместо *left
.
Печальным следствием этого является то, что вы не можете реализовать эффективную функцию независимой сортировки контейнеров на месте, как в C ++.