-1

ポイントデータ型要素[x、y]を格納するベクトルを反復処理しています。反復ごとに達成したいのは、最初の4点x要素と最初の4点y要素を追加することです....次の反復中次の 4 x & y で同じことをしたい......などなど

最初の反復 1.x + 2.x + 3.x + 4.x 1.y + 2.y + 3.y + 4.y

2 回目の反復 5.x + 6.x + 7.x + 8.x 5.y + 6.y + 7.y + 8.y

など......................私の問題が明確であることを願っています

サンプルコード:

double Pta; 
    double Ptb;
    Point  vect;
    float R1, R2;
    float resultant;
    vector<Point> vect_add;
    for(vector<Point>::iterator iter_a = Left_Arm_xy.begin()+1; iter_a != Left_Arm_xy.end(); ++iter_a)
    {

        if(center.y <= 240)
        {
            vect.x = iter_a->x - (iter_a -1)->x;
            vect.y = iter_a->y - (iter_a -1)->y;

            vect_add.push_back(Point(vect.x,vect.y));


            for(vector<Point>::iterator iter_v = vect_add.begin(); iter_v != vect_add.end(); ++iter_v)
            {



                    R1 = iter_v->x + (iter_v +1)->x + (iter_v +2)->x + (iter_v +3)->x;
                    R2 = iter_v->y + (iter_v +1)->y + (iter_v +2)->y + (iter_v +3)->y;

                    resultant = sqrt(pow(R1,2) + pow(R2,2));



                    cout<<"Resultant: "" "<<resultant<<endl;

            }

        }

すべての x と y を追加しようとしている部分が出てくると、プログラムは以前と同じように正常に動作します.....したがって、問題はそこにある必要があります..構文は正しくないと思いますが、そうではありません最高のプログラマーであり、コンパイラーの警告がないため、何が問題なのかを知ることができませんでした....プログラムは実行時にクラッシュするだけです

このコードに関して私が間違っていることを誰でも見ることができますか

デバッグ: ここに画像の説明を入力

デバッグ ブレークポイントの写真を追加しただけで申し訳ありませんが、この場合、写真は 1000 語の価値があると思います :P

4

3 に答える 3

1

イテレータ + 3 がベクトル (vect_add) の制限を超えるかどうかを制御して、ベクトルの境界を超えないようにすることで実行できます。また、反復ごとに、設計されたスキームを取得するためにイテレータを 4 ずつ増やす必要があります。

for(vector<Point>::iterator iter_v = vect_add.begin(); iter_v - vect_add.begin() + 4 < vect_add.size(); iter_v+=4)
{ 
       R1 = iter_v->x + (iter_v +1)->x + (iter_v +2)->x + (iter_v +3)->x;
       R2 = iter_v->y + (iter_v +1)->y + (iter_v +2)->y + (iter_v +3)->y;

       resultant = sqrt(pow(R1,2) + pow(R2,2));



       cout<<"Resultant: "" "<<resultant<<endl;

 }

ここで、 iter_v - vect_add.begin() は現在の反復子のインデックスを提供し、for ループで加算操作に十分な数の要素があるかどうかを確認します。

于 2013-04-11T05:07:06.983 に答える
0

これが関連しているかどうかはわかりませんが、ベクトルをクリアするとイテレータが無効になります。std::vectorからクリア

このコンテナーに関連するすべての反復子、ポインター、および参照は無効になります。

ここでベクトルをクリアします

if(vect_add.size() > 20)
{
     vect_add.clear();
}
于 2013-04-11T04:03:43.010 に答える