2012-09-18 188 views
1

我有兩個std::list,它們每個都有一個位置矢量m_Pos。我是std::list的新手,我會計算這兩個列表中每個索引之間的距離並將它們存儲在一個數組中。這是我所做的,我不知道它是否是正確的方式兩個std之間的距離::列表

問題是目錄向量有距離不是有序的方式,我想要例如存儲位置之間的distane Acurrent和Aprev,B當前,Bprev,要被存儲在順序在目錄矢量,這樣我可以在它們之間後進行相關,這樣我說DIR [0]是

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

它看起來不錯,除了在,有時打印出中間的那個時髦的循環' 「fdfdfd」'。你想要代碼做什麼,它做什麼和你想要的有什麼不同? –

+0

它看起來像代碼應該做你所描述的(雖然'prevIter!= end()'的檢查是多餘的,因爲你已經檢查過這兩個列表是相同的大小)。它是否編譯,運行並提供預期結果?如果是這樣,問題是什麼?如果不是,究竟出了什麼問題? –

+0

問題是距離不是有序的方向向量,我想要例如存儲位置Acurrent和Aprev,Bcurrent,Bprev之間的distane按順序存儲在dir向量中,這樣我可以稍後關聯在他們之間,所以我說dir [0]是Acurr,Aprev之間的距離等等。 –

回答

5

考慮Acurr之間的距離,Aprev..etc使用標準算法,請注意,如果您有權訪問C++,則該操作可以是lambda。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

+0

它崩潰並給出列表迭代器不可引用 –

+1

然後你做錯了什麼。發佈你的新代碼。還斷言列表的長度相同。 – 111111

+0

它現在正在工作謝謝,請問您會告訴我解決方案,而不使用變換和back_insereter?我很感興趣。 –