내가 반복하는 목록이 있다고 가정합니다. 내가 뭔가 흥미로운 것을 발견하면 나는 사본을 먹고 싶어하고 그 시점에서 뭔가를 할 :목록 및 관련 반복기 복사
std::list<int> a;
for(auto i = a.begin(); i != a.end(); ++i)
{
if(is_interesting(*i))
{
std::list<int> b = a; // take a copy
do_something(b, i); // :(
}
}
은 물론이 반복자 i
이 a
하지 b
참조하기 때문에 작동하지 않을. b
에서 i
이 참조하는 동일한 위치를 나타내는 반복자 j
을 얻으려면 a
? 당신은 당신의 루프 조건으로 카운터를 증가, 대신의 오프셋 재 계산하여이를 최적화 할 수
std::list<int> b = a;
std::list<int>::iterator j = b.begin();
std::advance(j, std::distance(a.begin(), i));
:
당신은'std :: distance'와'std :: advance'로 할 수 있습니다. 그러나 이것은 나에게 꽤 어색한 것처럼 보입니다. 무작위 액세스 컨테이너에서는 좋지 않습니다. 왜 전체 목록을 복사해야합니까? 그리고 왜 루프 안에서? –
http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –
@LightnessRacesinOrbit 그게 효과가 있지만 불필요하게 느릴 것이라고 상상해 봅니다. 내 목록의 수정 된 버전을 목록의 목록에 추가하고 싶습니다. – wxffles