[英]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;
}
代码工作正常,但是会产生上述错误,我想解决
该错误意味着存在从long
到int
转换。 从您提供的代码很难知道错误在哪里,但是我建议在代码中将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.