목록을 처음부터 끝까지 표시하고 싶습니다. 마찬가지로 :C++ - 목록을 처음부터 끝까지 트래버스하는 방법?
for (std::list<T>::const_iterator it = list.end(); it != list.begin(); --it)
문제는 첫 번째 요소 (list.begin()
)에있을 때의 입력하지 않습니다. 어떻게해야합니까?
목록을 처음부터 끝까지 표시하고 싶습니다. 마찬가지로 :C++ - 목록을 처음부터 끝까지 트래버스하는 방법?
for (std::list<T>::const_iterator it = list.end(); it != list.begin(); --it)
문제는 첫 번째 요소 (list.begin()
)에있을 때의 입력하지 않습니다. 어떻게해야합니까?
rbegin 및 rend를 사용하여 역방향 반복기를 가져옵니다.
for (std::list<...>::reverse_iterator it=list.rbegin(); it!=list.rend(); ++it)
보너스로 '자동'을 사용할 수 있습니다. – xtofl
사용 역 반복자 :
for (auto it = l.crbegin(); it != l.crend(); ++it)
for (std::list<...>::const_reverse_iterator it = l.rbegin(); it != l.rend(); ++it)
C++의 11 std::list<T>
예를 list
의 이름을 지정하지 마십시오.
역 반복자는'rbegin' (마지막 요소)으로 시작해야한다고 생각합니다.'for (auto it = list.rend(); it! = list.rbegn(); ++ it) {...} .. 그리고'rend' (첫 번째 요소)로 간다, 그렇지? 귀하의 대답은 거꾸로 있습니다. – abelenky
@abelenky 예, 그것이 맞습니다. OP 코드에서 잘못 잘라내어 붙여 넣기가 실패했습니다. – juanchopanza
당신은 reverse iterator을 원합니다. rbegin
및 rend
을 참조하십시오.
덧셈 : 왜냐하면 it = list.end();
에서 "끝"(또는 오른쪽 또는 왼쪽 경계점을 가리키는 점)으로 이해되는 포인터 [메모리의 일부 블록]을 가져옵니다. 그래서 그 내용을 출력합니다 (cout < < *) 당신은 메모리 [블록] 주소를 보게 될 것입니다. 당신이 선언이로 사용하는 경우 :
std::list<...>::const_iterator it = list.begin();
std::list<...>::const_iterator iTail = list.end();
while(it!=iTail)
{
//do smthing
++it;
}
중 루프가 생략됩니다 또는 당신은 힙에서 일부 쓰레기를 얻을 것이다. const_iterator의 경우 (문서를 읽지는 않았지만 분명히 "쓰기"보호). 반복자의 경우 std::list<...>::iterator
.end()
은
을 가리키며 마지막 요소는
=> [end]입니다. 경우 :
표준 : : 목록 < ...> :: const_reverse_iterator 및 표준 : : 목록 < ...> :: reverse_iterator
반복자에 따라, 첫 번째 ELEM에 자동으로 이동 start => end
또는 end =>start
을 실행하면 목록을 통해 실행됩니다.
'list.end()'가 목록에 없으므로 _it이 입력되지 않습니다. – deepmax
중복 가능성 : [C/C++/C++에서 역방향 루프를 수행하는 가장 좋은 방법은 무엇입니까?] (http://stackoverflow.com/q/275994/1084416) –