C++ 如何迭代循环中的两个向量

C++ 如何迭代循环中的两个向量,c++,visual-studio,opencv,vector,stdvector,C++,Visual Studio,Opencv,Vector,Stdvector,我试图访问for循环中两个不同向量之间的几个元素。VisualStudio给我以下警告C26451 算术溢出:对4字节值使用运算符“+”,然后将结果强制转换为8字节值。在调用运算符“+”之前将值强制转换为更宽的类型,以避免溢出(io.2) 我尝试过转换各种数据类型,但我知道我应该使用迭代器在循环中遍历向量,但是,由于我在循环中使用了两个向量,并且同时为每个向量使用了多个元素,我无法找到正确实现这一点的方法。 这里有两个不同的功能,我有相同的问题 第一功能 Mat drawRails(Mat dr

我试图访问for循环中两个不同向量之间的几个元素。VisualStudio给我以下警告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;
}
Mat导轨(Mat导轨、矢量线、矢量线){
//将轨道绘制到输入图像
对于(int j=0;j
第二功能

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;
}

Mat drawHazardLines(Mat draw、矢量线、矢量线、int frameNum){
//画出危险线来追踪
对于(int j=0;j
代码运行良好,但是会产生我想要解决的上述错误

for(auto lIter = lLines.begin(), rIter = rLines.begin(); liter != lLines.end(); ++lIter, ++rIter)
{
   ... 
}
当然,您需要确保RLINE的项目数至少与LLINE的项目数相同


当然,您需要确保RLINE的项目数至少与LLINE的项目数相同

该错误表示存在从
long
int
的转换。
从您提供的代码中很难判断错误在哪里,但我建议将代码中的
int
更改为
long

错误意味着从
long
转换为
int

从您提供的代码中很难判断错误在哪里,但我建议将代码中的
int
更改为
long

不相关,这两个向量似乎都没有被任何函数修改。为什么不通过常量引用传递它们是个谜。对副本进行压力测试?仅供参考,
int j=0;j
是个糟糕的主意。如果输入向量实际上为空,则不希望进行该计算;结果将非常令人不快。使用迭代器。关于算术溢出的错误/警告与在循环中迭代两个向量无关。试着缩小你问过的两个问题中你真正需要帮助的那一个。如果两方面都需要帮助,请分别提问。将它们结合起来,再加上不提供a,会减少获得任何有用建议的机会。不相关的是,这两个向量似乎都不会被任何一个函数修改。为什么不通过常量引用传递它们是个谜。对副本进行压力测试?仅供参考,
int j=0;j
是个糟糕的主意。如果输入向量实际上为空,则不希望进行该计算;结果将非常令人不快。使用迭代器。关于算术溢出的错误/警告与在循环中迭代两个向量无关。试着缩小你问过的两个问题中你真正需要帮助的那一个。如果两方面都需要帮助,请分别提问。将它们结合在一起,再加上不提供答案,减少了获得任何有用建议的机会。