1

2 つstd::listあり、それぞれに位置ベクトルがありm_Posます。私は の初心者でstd::list、これら 2 つのリストの各インデックス間の距離を計算し、それらを配列に格納します。これは私がやったことです、それが正しい方法であるかどうかはわかりません

問題は、距離が順序付けられていない dir ベクトルです。たとえば、位置 Acurrent と Aprev、Bcurrent、Bprev の間の距離を格納して、後で相互に関連付けることができるように、dir ベクトルに順番に格納したいと考えています。つまり、dir[0] は Acurr、Aprev などの間の距離です。

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 にアクセスできる場合は、アクションをラムダにすることができることに注意してください。

 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 に答える