2012-09-18 3 views
1

나는 두 개의 std::list을 가지며, 각각 하나의 위치 벡터는 m_Pos입니다. 나는 std::list에 초보자이고, 나는이 두 목록의 각 색인 사이의 거리를 계산하여 배열에 저장하려고합니다. 이것은 내가 한 일입니다. 정확한 방법인지 알지 못합니다.두 개의 표준 사이의 거리 :: List

문제는 거리가 순서대로 정렬되어 있지 않은데, 예를 들어 위치가 현재 위치와 현재 위치 사이에 distane을 저장하려고합니다. I 그들 사이 나중에 연관시킬 수 있도록 I 말하도록 Aprev, Bcurrent, Bprev는 디렉터리 벡터의 순서로 저장 될 디렉토리 [0] Acurr 사이의 거리 Aprev..etc

if(objs.size() == m_prev_objs.size()) 
{ 
    std::vector<Vec2f> dir; 
    std::list<Obj>::iterator prevIter = m_prev_objs.begin(); 
    std::list<Obj>::iterator currIter = objs.begin(); 

    // Vec2f dis = currIter->m_Pos - prevIter->m_Pos; 
    for (std::list<Obj>::iterator currIter = objs.begin(); currIter != objs.end(); ++currIter) 
    { 

     dir.push_back(currIter->m_Pos - prevIter->m_Pos); 

    } 

      prevIter++; 

} 
+0

그것은 때때로 출력합니다 중간에 펑키 루프를 제외하고 좋아 보이는

http://en.cppreference.com/w/cpp/algorithm/transform

은'' "fdfdfd". 코드에서 무엇을하고 싶습니까? 그러면 코드가 원하는 것과 다른 점이 무엇입니까? –

+0

코드는 당신이 기술 한 것을 수행해야합니다 (이미'prevIter! = end()'에 대한 체크는 중복되어 있습니다, 왜냐하면 당신은 이미 두리스트가 같은 크기인지 확인했기 때문입니다). 그것을 컴파일하고, 실행하고, 예상되는 결과를 제공합니까? 그렇다면 질문은 무엇입니까? 그렇지 않다면 정확히 무엇이 잘못 될까요? –

+0

문제는 거리가 순서대로 정렬되어 있지 않은 dir 벡터입니다. 예를 들어, 위치 Acurrent와 Aprev, Bcurrent, Bprev 사이에 Distane을 저장하여 dir 벡터에 순서대로 저장하여 나중에 상관시킬 수 있습니다. 그들 사이에, 내가 dir [0]이 Acurr, Aprev ... 사이의 거리라고 말하도록 –

답변

5

이 고려는 표준 알고리즘을 사용하면 C++ 11에 액세스 할 수있는 경우 액션이 람다가 될 수 있습니다.

inline Vec2f action(const Objs& o1, const Objs& o2) { 
     return o1->m_Pos 
      - o2->m_Pos; 
} 


//elsewhere 
std::vector<Vec2f> dir; 
dir.reserve(objs.size()); 

std::transform(
     objs.begin(),   
     objs.end(), 
     m_prev_objs.begin(), 
     std::back_inserter(dir), 
     action 
); 

http://en.cppreference.com/w/cpp/iterator/back_inserter

+0

크래시가 발생하고 목록 반복기가 참조 가능하지 않음 –

+1

잘못된 작업을 수행하고 있습니다. 새 코드를 게시하십시오. 또한 목록 길이가 같다고 주장하십시오. – 111111

+0

지금 고마워요, 제게 transform과 back_insereter를 사용하지 않고 해결책을 보여 주시겠습니까? 내가 관심. –