2010-02-26 8 views
4

이 같은 실행 뭔가를 :STL의 const_iterator에서 데이터를 가져 오는 방법은 무엇입니까?

T baseline; 
list<T>::const_iterator it = mylist.begin(); 
while (it != mylist.end()) { 
    if (it == baseline) /* <----- This is what I want to make happen */ 
    // do stuff 
} 

내 문제는 내가 어떻게 반복자로부터 데이터를 추출하는 생각이 없다는 것입니다. 나는 이것에 대해 혼란스러워하는 바보 같은 느낌이지만, 어떻게 해야할지 전혀 모른다.

편집 : (그래서 너무 멀리이 비유를하지 않지만, 반드시 포인터하지 않습니다) 고정 begin.end()

+5

로서 여러분이'while' 문제가 있습니다 사용'mylist.end을()'. – dirkgently

답변

9

반복자는 포인터처럼 "보이는"인터페이스를 가지고있다.

반복기는 컨테이너에있는 단일 데이터에 대한 참조를 나타냅니다. 원하는 것은 iterator가 지정한 위치에서 컨테이너의 내용에 액세스하는 것입니다. *it을 사용하여 it 위치의 콘텐츠에 액세스 할 수 있습니다. 마찬가지로 내용이 객체 인 경우 it의 내용에 대한 메서드를 it->method()을 사용하여 호출 할 수 있습니다.

이것은 실제로 귀하의 질문과 관련이 없지만, 때로는 확인해도 흔한 실수입니다. it의 내용이 인 경우 오브젝트은 오브젝트에 대한 메소드를 호출하기 위해 두 가지 레벨의 간접 지정이 있으므로 구문은 (*it)->method()입니다.

3

구문은 반복자를 사용은 기본적으로 포인터와 동일합니다.

if (it->someValue == baseline) ... 
: 목록 객체 당신은 또한 ->와 방법과 객체의 속성에 액세스 할 수의 목록 인 경우

if (*it == baseline) ... 

: 반복자 "점을"당신이 *으로 역 참조 사용할 수있는 값을 얻으려면

1

iterator가 가리키는 요소에 액세스하려면 * it을 사용하십시오. (* it == baseline)

1

std iterators가 *() 연산자를 오버로드하여 참조 된 위치에 포인터가있는 것처럼 액세스 할 수 있습니다. 내가 표준 반복자를 알고에서

T const& a = *it; 
0

포인터가 아니라 기본 개별 데이터 요소에 실제 포인터 주위에 얇은 래퍼입니다.

이터레이터가 가리키는 요소에 액세스하려면 something=*it 을 사용할 수 있습니다.

* it == 기준선은 이러한 종류의 동작에 대한 올바른 코드입니다. 또한

당신이 STL에서 컬렉션을 다루고있는 경우이 기능을 사용하여 고려할 수 등 find_if http://www.cplusplus.com/reference/algorithm/find_if/

관련 문제