两个std :: List之间的距离

时间:2012-09-18 12:08:07

标签: c++ algorithm

我有两个std::list,每个m_Pos都有一个位置向量std::list。我是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++; } 的新手,我想计算这两个列表中每个索引之间的距离并将它们存储在一个数组中。这就是我所做的,我不知道这是不是正确的方式

问题是dir矢量的距离不是有序的,我想要例如存储位置Acurrent和Aprev,Bcurrent,Bprev之间的distane,以便在dir向量中按顺序存储,这样我就可以稍后关联它们,所以我说dir [0]是Acurr,Aprev..etc之间的距离

{{1}}

1 个答案:

答案 0 :(得分:5)

考虑使用标准算法,请注意,如果您有权访问C ++ 11,则操作可以是lambda

 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/algorithm/transform

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