Типичный пример итератора С++ является указателем и может использоваться для указания элемента в массиве C следующим образом:
int array[] = {1, 2, 3, 4};
int* begin = std::begin(array); //Starting iterator
int* end = std::end(array) //Ending iterator
for(int* i = begin; i < end; i++)
{
std::cout << *i << ',';
}
//Prints 1, 2, 3, 4
Это достаточно просто. Определение итератора из cplusplus.com -
Итератором является любой объект, который, указывая на некоторый элемент из диапазона элементов (например, массив или контейнер), имеет возможность итерации по элементам этого диапазона с помощью набора операторов...
Это имеет смысл; в приведенном выше коде были два итератора (итераторы begin
и end
), и он использовал цикл for
и увеличивал.
В Rust используется итератор следующим образом:
let vect = vec![1, 2, 3, 4];
let vect_iter = vect.iter();
Что? Чтобы повторить его, выполните следующие действия:
vect_iter.next();
vect_iter.next();
Я не мог найти точное определение указателя в документах Rust, но, смотря на Iterator
trait, кажется что итератор является оболочкой для контейнера, что позволяет упростить обработку, стандартизируя логику в некотором смысле (если это имеет смысл вообще).
Основные вопросы, которые у меня есть:
- В чем основные отличия?
- Почему у Rust есть итераторы таким образом и почему они выражаются так по-другому?
- Существуют ли итераторы типа Rust в С++?
- Существуют ли итераторы типа С++ в Rust?
- Они называются что-то конкретное? (Внутренний/внешний?)