В C + можно использовать итераторы для записи в последовательность. Самый простой пример был бы:
vector<int> v;
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) {
*it = 42;
}
Мне нужно что-то более сложное - сохраняют итератор как участника класса для более позднего использования. Но я не знаю, как получить это поведение от итераторов Java.
Есть ли перезаписываемые итераторы в Java вообще?
Если не затем, что заменяет их?
У ListIterator
(который можно получить с помощью List#listIterator()
) есть методы add()
и set()
которые позволяют соответственно вставить и заменить элемент по текущему итерируемому индексу. Это пока единственный "записываемый итератор", который я могу вспомнить в Java.
Не уверен, что это точная замена приведенного кода на C++, поскольку я не знаю C++.
Похоже, вам нужен Список
(или, может быть, какая-то другая коллекция, например Set
) или массив .
Кроме того, вы можете просто сделать свое содержимое изменяемым. Для целых чисел это выглядит глупо, но продолжая ваш пример
for (MutableInteger i : CollectionOfMInts) i.setTo(42);
Поскольку к массивам можно обращаться непосредственно и быстро по их индексу, вам не нужен объект-итератор. Разве не достаточно было бы сохранить индекс массива в члене класса? Это позволило бы читать и записывать значение массива.
PS: Вы можете использовать ArrayList, который является автоматически растущим набором массивов, и использовать ListIterator, как описал Balus, чтобы использовать подход итератор-объект.