코루틴(Coroutine)트리 탐색 알고리즘에서 operator++를 이용하면, 의사코드와 차이점이 발생한다.
(가독성을 떨어뜨릴 수 있음)
operator++는 트리의 최좌측 노드로 초기화한다.
이와 같은 코드는 재시작을 지원하지 않으며, 호출 간의 스택을 보존할 수 없기 때문에
재귀 호출도 불가능하다.
코루틴은 호출 중간에 중간 결과를 넘겨준 후 쉰회를 중단하고
중간 결과에 대한 작업이 끝난 후 순회를 재개할 수 있게 한다.
Coroutine; wiki
코루틴(coroutine)은 루틴의 일종으로서, 협동 루틴이라고 한다.
상호 연계 프로그램을 일컫는다.
루틴과 서브루틴은 서로 비대칭적인 관계이지만, 코루틴은 완전히 대칭적인 서로가 서로를 호출하는 관계
코루틴을 사용한 트리의 후위 탐색
위와 같은 coroutine은 begin()/end()를 사용하지 않으며, 단지 generator를 리턴한다.
(가독성을 높임, python의 yield; generator와 유사한 방식)
재귀가 가능하면서 아래와 같은 반복자 인터페이스를 제공
C++20 Coroutineco_await 연산자를 사용하여 재개될 때까지 실행을 일시 중단
co_return 값을 반환하는 실행을 완료
co_yeild 값을 반환하는 실행을 일시 중단
함수에 위와 같은(co_) 키워드가 발생하면, 코루틴이 된다.
gcc에서는 아직 지원하지 않음
clang 5.0 이상
clang -fcoroutines-ts -stdlib=libc++ -std=c++2a