C++ 如何迭代循环中的两个向量
我试图访问for循环中两个不同向量之间的几个元素。VisualStudio给我以下警告C26451 算术溢出:对4字节值使用运算符“+”,然后将结果强制转换为8字节值。在调用运算符“+”之前将值强制转换为更宽的类型,以避免溢出(io.2) 我尝试过转换各种数据类型,但我知道我应该使用迭代器在循环中遍历向量,但是,由于我在循环中使用了两个向量,并且同时为每个向量使用了多个元素,我无法找到正确实现这一点的方法。 这里有两个不同的功能,我有相同的问题 第一功能C++ 如何迭代循环中的两个向量,c++,visual-studio,opencv,vector,stdvector,C++,Visual Studio,Opencv,Vector,Stdvector,我试图访问for循环中两个不同向量之间的几个元素。VisualStudio给我以下警告C26451 算术溢出:对4字节值使用运算符“+”,然后将结果强制转换为8字节值。在调用运算符“+”之前将值强制转换为更宽的类型,以避免溢出(io.2) 我尝试过转换各种数据类型,但我知道我应该使用迭代器在循环中遍历向量,但是,由于我在循环中使用了两个向量,并且同时为每个向量使用了多个元素,我无法找到正确实现这一点的方法。 这里有两个不同的功能,我有相同的问题 第一功能 Mat drawRails(Mat dr
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
是个糟糕的主意。如果输入向量实际上为空,则不希望进行该计算;结果将非常令人不快。使用迭代器。关于算术溢出的错误/警告与在循环中迭代两个向量无关。试着缩小你问过的两个问题中你真正需要帮助的那一个。如果两方面都需要帮助,请分别提问。将它们结合在一起,再加上不提供答案,减少了获得任何有用建议的机会。