C++ 为每个迭代获取最大值
我有一个C++ 为每个迭代获取最大值,c++,C++,我有一个cv::Mat Mat,用它做一些事情,得到一个std::vector对角线点,用于进一步编码,这里变得很棘手-在创建这些对角线点之后,我遍历每一列以获得两点之间的最大距离(对于每一列,因此我比较[I].x和[I+1].x-见下文)。但是(!)在计算之后,我会得到一个列的每个最大值,它比上一个更大,而不是一个列的最大值 以下是我的代码的基本部分: for (int i = 0; i < diagonalPoints.size(); i++) { int dist = dia
cv::Mat Mat
,用它做一些事情,得到一个std::vector对角线点
,用于进一步编码,这里变得很棘手-在创建这些对角线点之后,我遍历每一列以获得两点之间的最大距离(对于每一列,因此我比较[I].x
和[I+1].x
-见下文)。但是(!)在计算之后,我会得到一个列的每个最大值,它比上一个更大,而不是一个列的最大值
以下是我的代码的基本部分:
for (int i = 0; i < diagonalPoints.size(); i++) {
int dist = diagonalPoints[i + 1].y - diagonalPoints[i].y;
if (diagonalPoints[i].x == diagonalPoints[i + 1].x) {
if (dist > maxDist) {
maxDist = dist;
maxDistColumn = diagonalPoints[i].x;
firstPt = diagonalPoints[i];
secondPt = diagonalPoints[i + 1];
}
}
else if (diagonalPoints[i].x != diagonalPoints[i + 1].x) {
maxDist = 0;
}
std::cout << maxDist << " in i: " << maxDistColumn << "\n";
farestPoints = std::make_pair(firstPt, secondPt);
std::cout << farestPoints.first << ", " << farestPoints.second << " ";
}
但是我只想在I:0中获得[0,42],[0,950]-maxDist:908,因为它是最大的值。当然,这可能只是我代码中的一个简单更改,但我真的不明白。我应该换什么
谢谢 我认为您只需要在找到列的结尾时将打印移到
for (int i = 0; i < diagonalPoints.size() - 1 /* need to stop before going off the end */; i++) {
if (diagonalPoints[i].x == diagonalPoints[i + 1].x) {
// same column, so calculate distance and compare
int dist = diagonalPoints[i + 1].y - diagonalPoints[i].y;
if (dist > maxDist) {
maxDist = dist;
maxDistColumn = diagonalPoints[i].x;
firstPt = diagonalPoints[i];
secondPt = diagonalPoints[i + 1];
}
}
else {
// new column, so print the maximum and reset
std::cout << maxDist << " in i: " << maxDistColumn << "\n";
farestPoints = std::make_pair(firstPt, secondPt);
std::cout << farestPoints.first << ", " << farestPoints.second << " ";
maxDist = 0;
}
}
// after the loop, we still have the last column to print
std::cout << maxDist << " in i: " << maxDistColumn << "\n";
farestPoints = std::make_pair(firstPt, secondPt);
std::cout << farestPoints.first << ", " << farestPoints.second << "
for(int i=0;i最大距离){
最大距离=距离;
maxDistColumn=对角点[i].x;
firstPt=对角线点[i];
第二点=对角线点[i+1];
}
}
否则{
//新列,因此打印最大值并重置
std::无法将打印移到循环外,只能捕获循环中的最大值。@如果是,则只打印最后一次迭代。在设置maxDist
之前,可以将其与以前的值进行比较。仅当该值更高时才设置。然后在外打印for
loop@Nipun如何获取以前所有的dist
s?它是al通过(dist>maxDist)
在您的代码中处理就绪,输出按升序排列。正如NathanOliver上面提到的,您不需要在循环中打印,也不需要在循环外打印。谢谢,工作完美无瑕!没有真正得到它,而是将它放在其他部分。
for (int i = 0; i < diagonalPoints.size() - 1 /* need to stop before going off the end */; i++) {
if (diagonalPoints[i].x == diagonalPoints[i + 1].x) {
// same column, so calculate distance and compare
int dist = diagonalPoints[i + 1].y - diagonalPoints[i].y;
if (dist > maxDist) {
maxDist = dist;
maxDistColumn = diagonalPoints[i].x;
firstPt = diagonalPoints[i];
secondPt = diagonalPoints[i + 1];
}
}
else {
// new column, so print the maximum and reset
std::cout << maxDist << " in i: " << maxDistColumn << "\n";
farestPoints = std::make_pair(firstPt, secondPt);
std::cout << farestPoints.first << ", " << farestPoints.second << " ";
maxDist = 0;
}
}
// after the loop, we still have the last column to print
std::cout << maxDist << " in i: " << maxDistColumn << "\n";
farestPoints = std::make_pair(firstPt, secondPt);
std::cout << farestPoints.first << ", " << farestPoints.second << "