1

我有两个std::list,每个都有一个位置向量m_Pos。我是新手std::list,我会计算这两个列表中每个索引之间的距离并将它们存储在一个数组中。这就是我所做的,我不知道这是否正确

问题是距离不是有序方式的 dir 向量,例如,我想存储位置 Acurrent 和 Aprev、Bcurrent、Bprev 之间的距离,以便按顺序存储在 dir 向量中,以便稍后在他们,所以我说 dir[0] 是 Acurr,Arev..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++;

}
4

1 回答 1

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

于 2012-09-18T12:25:56.350 回答