2016-05-04 15 views
0

いくつかの情報(id、position(x、y)、frameNumber)を持つfirstAppという名前のベクトルを埋めたいと思います。したがって、ベクトルを既存の情報で埋めないように条件を作ります。std :: findをループで使用する方法

std::vector<FirstAppearance>::iterator p; 
for (int idxCurrent = 0; idxCurrent < nOfPedcurrFrame ; idxCurrent++) 
{ 


      if(nOfPedprevFrame == 0) 
      { 
       CurrentId=frames[frameNumber].GetPedest()[idxCurrent].GetID(); 

       FA=FirstAppear(frames,CurrentId,idxCurrent); 

       FirstPosition=frames[FA].GetPedest()[idxCurrent].GetPosition(); 

       f.SetFrameNumber(FA); 
       f.SetFirstPosition(FirstPosition); 
       f.SetFId(CurrentId); 


       if(firstApp.size() !=0) 
       { 


        p=std::find(firstApp.begin(),firstApp.end(),f); 
        std::cout << *p<< endl; 


        if(p == firstApp.end()) 
        { 
         firstApp.push_back(f); 

        } 
       } 
       else 
       { 

        firstApp.push_back(f); 

       } 


       f.~FirstAppearance(); 
      } 
} 

FirstAppearnce.cpp:

#include "stdafx.h" 
#include "FirstAppearance.h" 
#include <iostream> 

FirstAppearance::FirstAppearance(){} 
int FirstAppearance::GetFId(void)const {return fId;} 
objectCoordinates FirstAppearance::GetFirstPosition(void)const {return firstPosition;} 
void FirstAppearance::SetFirstPosition(objectCoordinates pos){firstPosition =pos;} 
void FirstAppearance::SetFId(int id){fId =id;} 
int FirstAppearance::GetFrameNumber(void)const {return fNumber;} 
void FirstAppearance::SetFrameNumber(int fnumb){ fNumber = fnumb;} 
bool FirstAppearance::operator==(const FirstAppearance& a){ 

    if((firstPosition.x == a.firstPosition.x) && (firstPosition.y == a.firstPosition.y) && 
    (fId==a.fId) && (fNumber==a.fNumber)){ 
     return true;   
    } 
} 
FirstAppearance::~FirstAppearance(){} 

私はSTDを使用する:: fが、私は、pは、このような値を持っていたことだ私のプログラムをコンパイルするときにそれをon.But埋めるために私のベクターに存在するかどうか検索する見つけます私のprogram.Canの人生に沿ってfの最初の値は、なぜstd :: findがfの値を新しい値で更新しなかったか教えてください。 * pの 出力は次のようになります。

1 263 138 0 
1 263 138 0 
1 263 138 0 
1 263 138 0 
1 263 138 0 
+2

: 次のようなものを持っている必要があります。 –

+3

'f。〜FirstAppearance();'疑わしく見える –

+3

'p == firstApp.end()'が未定義の動作であるときに 'p'を間接参照します。スマートコンパイラは 'if(p == firstApp.end())チェックを最適化し、常に' firstApp.push_back(f); 'を実行します。また、 'f。〜FirstAppearance();'は、あなたがすることを意味するものではありません。 – nwp

答えて

0
bool FirstAppearance::operator==(const FirstAppearance& a) 
{ 

if((firstPosition.x == a.firstPosition.x) && (firstPosition.y == a.firstPosition.y) && 
(fId==a.fId) && (fNumber==a.fNumber)){ 
    return true;   
} 
else 
{ 
    return false; 
} 
} 
0

あなたは正しく結果を確認されていません。あなたのコードの書式設定を修正するためにあなたの質問を編集してください

p=std::find(firstApp.begin(),firstApp.end(),f); 
if (p == firstApp.end()) { 
    std::cout << f << " not found." << endl; 
    firstApp.push_back(f); 
} else { 
    std::cout << *p << endl;  
} 
+0

私はこれを試みましたが、最初の値を常にテストしてelse命令に入力し、通常は同じ結果を表示するようです:1 263 138 0 – para

関連する問題