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 << "