繁体   English   中英

如何循环遍历两个向量

[英]How to iterate through two vectors within a loop

我正在尝试在for循环中的两个不同向量之间访问几个元素。 Visual Studio给我以下警告C26451;

算术溢出:对4字节的值使用运算符'+',然后将结果转换为8字节的值。 在调用运算符“ +”之前,将值强制转换为较宽的类型,以避免溢出(io.2)。

我尝试过转换各种数据类型,但了解应该使用迭代器在循环中遍历一个向量, 但是由于我在循环中使用两个向量,并且一次为每个向量使用多个元素,因此我找不到方法正确实施。 这是我遇到相同问题的两个不同功能;

第一功能;

Mat drawRails(Mat draw, vector<Point>lLines, vector<Point>rLines) {
//draw rails to the input image
    for (int j = 0; j < lLines.size() - 1; j++) {
        //draw rails - accessing point j and next point to correctly define the line
        line(draw, lLines[j], lLines[j + 1], Scalar(255, 255, 255), 4);
        line(draw, rLines[j], rLines[j + 1], Scalar(255, 255, 255), 4);
    }
    return draw;
}

第二功能;


Mat drawHazardLines(Mat draw, vector<Point>lLines, vector<Point>rLines, int frameNum) {
//draw hazard lines to track
    for (int j = 0; j < lLines.size() - 1; j++) {
        //draw outwards moving rail lines - divide rail width by ten and multiply by modulo 10 of frame to achieve motion
        int railDistNext = (rLines[j + 1].x - lLines[j + 1].x) / 10 * (frameNum % 10) + 2;
        int railDist = (rLines[j].x - lLines[j].x) / 10 * (frameNum % 10) + 2;


        Point Low, High;
        Low = Point(lLines[j].x - railDist, lLines[j].y);
        High = Point(lLines[j + 1].x - railDistNext, lLines[j + 1].y);
        line(draw, Low, High, Scalar(0, 0, 255), 4);

        Low = Point(rLines[j].x + railDist, rLines[j].y);
        High = Point(rLines[j + 1].x + railDistNext, rLines[j + 1].y);
        line(draw, Low, High, Scalar(0, 0, 255), 4);
    }
    return draw;
}

代码工作正常,但是会产生上述错误,我想解决

该错误意味着存在从longint转换。 从您提供的代码很难知道错误在哪里,但是我建议在代码中将int更改为long

for(auto lIter = lLines.begin(), rIter = rLines.begin(); liter != lLines.end(); ++lIter, ++rIter)
{
   ... 
}

当然,您需要确保rLines的项至少与lLines一样多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM