-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

第二次迭代 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 的部分时,程序像以前一样工作正常.....因此问题必须我在那里..我猜语法不正确但不是最好的程序员,因为没有编译器警告,这不能是什么错误……程序只是在运行时崩溃

谁能看到我对这段代码做错了什么

调试: 在此处输入图像描述

很抱歉只添加了 Debug 断点的照片,但我认为在这种情况下,图片值得 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

问题之一在这里:

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;

iter_v + 1toiter_v+ 3可能超出范围,导致尝试访问不属于 的内存vector,因此崩溃。

在这种情况下,检查条件if(vect_add.size() >4)没有多大帮助。

这篇文章根本没有意义:

if(vect_add.size() > 20)
{
    vect_add.clear(); //does not make sense, you remove all the elements in vector?
}
于 2013-04-11T03:53:27.107 回答
0

不知道这是否相关,但清除向量会使迭代器无效。从std::vector 清除

与此容器相关的所有迭代器、指针和引用均无效。

你在这里清除你的矢量

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