Можно ли пройти std::forward_list
, увеличивая итератор, пока указанный интегратор не станет нулевым? По старинке ...
В следующем примере я создаю функцию print()
.
#include <iostream>
#include <forward_list>
void print(std::forward_list<int>::iterator fl_it, std::forward_list<int>::iterator e) {
while (fl_it != e) {
std::cout << *fl_it << ' ';
++fl_it;
}
std::cout << std::endl; //-> 1 2 3
}
int main() {
std::forward_list<int> fl = {1, 2, 3};
print(fl.begin(), fl.end());
std::cout << std::endl;
return 0;
}
Обратите внимание, как необходимо передать итератор, указывающий на конец списка, чтобы мы знали, когда остановиться.
Что я хочу сделать, так это просто передать итератор в начало списка и двигаться дальше, пока не останется элементов, например:
void print(std::forward_list<int>::iterator fl_it) {
while (fl_it != nullptr) {
std::cout << *fl_it << ' ';
++fl_it;
}
std::cout << std::endl;
}
Мой компилятор не любит это fl_it != nullptr
дело.
Моим первым желанием было найти способ проверить, является ли итератор нулевым и ссылается ли он на конец списка. К сожалению, такого метода не существует.
Любые идеи?
istream&
конструктор и конструктор по умолчанию. Итератор, созданный по умолчанию, действует как конечный итератор для диапазона, и итератор, созданный istream, будет сравниваться с итератором, созданным по умолчанию, когда он встретит конец обернутого istream. Таким образом, вы можете передатьistream_iterator
в функцию и просто построить внутри нее конечный итератор. Но это не относится ко многим типам итераторов. - person jaggedSpire   schedule 12.01.2017