std::forward_list
을 걷는 것이 가능하며,이 중재자가 null이 될 때까지 반복기를 증가시킵니다. 구식 방식 ...`std :: forward_list`는 iterator가 null이 될 때까지 계속 걸을 것인가?
다음 예제에서는 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
사업을 좋아하지 않는다 :
내가 뭘 원하는 목록의 머리에 반복자를 통과, 거기에 더 이상 요소가 없을과 같이 될 때까지 함께 단계 단순히 .
첫 번째 경향은 iterator가 null인지 확인하는 방법을 찾고 목록의 끝을 참조하는 것이 었습니다. 슬프게도, 그런 방법은 존재하지 않습니다.
아이디어가 있으십니까?
이런 식으로 생각하십시오 : 배열의 첫 번째 요소가 있고 다른 정보가 없다면 끝까지 도달 할 수 있습니까? – AndyG
그리고 그 사람이 왔을 때 그 끝을 확인할 수 있습니까? – jaggedSpire
* is *에는 *이 함수가있는 몇 가지 종류의 반복자가 있습니다 - isstream &'생성자와 기본 생성자가있는 'std :: istream_iterator '가 있습니다. 기본 생성 iterator는 범위에 대한 end 반복자의 역할을하며, istream 생성 iterator는 wrapped istream의 끝을 만나면 기본 생성 iterator와 동일한 값을 비교합니다. 그래서 당신은 함수에'istream_iterator'를 전달할 수 있고, 단순히 내부에 iterator를 생성 할 수 있습니다. 그러나 이것은 많은 유형의 반복자에 적용되지 않습니다. – jaggedSpire