2012-06-23 4 views
2
나는에 대한 루프에서 목록을 여물 가서 이런 일을하고 싶지

:C++ 피연산자를 함께 list.back()와

list<my_object> my_list; 

for(int x = 0; x < my_list.size(); x++){ 

    my_object tempObject = (my_list.back() - x); 

    //more actions... 

} 

그러나 비록 http://www.cplusplus.com/reference/stl/list/back/ 쇼, 예를 Visual C++에서는 "연산자 없음"- "이 피연산자와 일치합니다"라고 말합니다 ...

저는 며칠 전에 C++을 시작했는데 아무 생각이 없습니다. 여기에서 어디로 가야합니까? 이런 식으로 물마루 목록을 볼 수 있습니까? 당신이 기반으로 C++ (11) 범위를 사용할 수 있습니다

for (auto i = begin(my_list), end = end(my_list); i!=end(); ++i) { 
    my_object tempObject = *i; 

    //more actions... 

} 

:

list<my_object> my_list; 

for (list<my_object>::iterator i(my_list.begin()), end(my_list.end()); i!=end; ++i) { 
    my_object tempObject = *i; 

    //more actions... 

} 

C++ (11)와 반복자를 사용 :

+0

http://programmers.stackexchange.com/questions/88241/whats-wrong-with-cplusplus-com – Griwes

+1

'list'에'int'와'int'가 포함되어있어 링크 된 예제가 작동합니다. 빼기를 지원합니다. 귀하의 목록에는'my_object's가 포함되어 있으므로'my_object'가 "subtraction"을 지원하지 않으면 컴파일되지 않습니다. –

+1

'back() -x' 부분은 목록을 거꾸로 반복하는 것으로되어 있습니까? 실제로 무엇을하는지는리스트 뒤의 값에서'x'를 빼기 때문에 코드가 실제로 원하는 것을 명확하게 밝히지는 않습니다. – jalf

답변

1

목록을 반복하는 적절한 방법은 반복자를 사용하는 것입니다 루프 :

for (my_object tempObject : my_list) { 

    //more actions... 

} 

또는 STL 스타일 알고리즘 템플릿이 이미 발생하면 '더 많은 작업 수행 '당신이 목록 내의 요소에 연결하는 예에서

more_actions(begin(my_list),end(my_list)); 
+0

가변적 인 반복자를 사용하고 있지만 * i의 복사본을 만드시겠습니까? –

+0

원본 코드는 사본을 만듭니다. 나는 그것을 권하고 싶지 않지만, 그 질문의 범위를 벗어난다. const iterator를 사용하는 이유라고 생각하지 않습니다. – bames53

1

는이 작동 이유입니다 int이다. 당신이하려고하는 것은 my_object의 인스턴스에서 정수를 뺍니다. 이 작업을 수행하는 기능은 없지만 기능이있는 경우 operator-(my_object &lhs, int rhs)이 가능할 수 있습니다.

관련 문제