Visual Studio 2010을 사용하고 있습니다. VS2010에서 제외되었지만 VS2012에 포함 된 기능 중 하나는 범위 기반의 for-loop입니다.VS2010에서 범위 기반 루프/for_each에서 포인터를 얻는 방법은 무엇입니까?
VS2012에서는 당신이-루프와 같은 깔끔한 슈퍼 깔끔한 수행 할 수 있습니다 몇 가지를 읽고시
for(auto it = myElements.begin(), end = myElements.end(); it != end; it++)
it->something();
: 지금까지
for(auto& it: myElements)
it->something();
, 내가 VS2010에서 얻을 수있는 가장 가까운이 구문입니다 boost/foreach를 사용하여 다음 매크로에 액세스 할 수 있음을 발견했습니다.
BOOST_FOREACH(auto it, myElements){
it.something();
}
내 문제는 wi 이 방법은 복사본 (또는 이와 비슷한)을 제공하고 포인터이 아니어야합니다. 여기 내가 혼란스러워하는 곳입니다.
그것은 더 동적 할당을하지 않습니다, 아니 가상 함수 호출하거나 함수 포인터를 통해 통화 및 컴파일러의 최적화에 투명하지 않은 어떤 전화도하지 않습니다하게 다음 foreach reference는 다음과 말했다.
이게 무슨 의미입니까? 사본이 아닌가?
어떻게하면 BOOST_FOREACH에서 포인터를 다시 얻을 수 있습니까? 아니면 다른 부스트 기능을 사용해야합니까?
나는 여기에 다른 질문이 구문을 본 적이 :
BOOST_FOREACH(auto& it, myElements){
it->something();
}
그러나이 나를 위해 컴파일하고 편집기에서 오류가 발생하지 않습니다. 이게 뭐가 잘못 됐어? 왜 나는 다른 많은 질문에 대한 유효한 코드로 여기를 찾았습니까?
VS2010에 범위 기반의 for-loop를위한 멋지고 깔끔한 솔루션이 있습니까? (를 포함하여 부스트)
관련이 없지만 범위 루프의 경우 참조를 참조 할 필요가 없습니다. – Rapptz
'it.setSomething (0)'방식으로 아무것도 수정하려고하면 사라집니다. – zsero
바르게 수정하면 일부 반복자가 무효화됩니다. – Rapptz