繁体   English   中英

如何读取Point - c ++向量的向量

[英]How to read a vector of vector of Point - c++

我的矢量的矢量Point (称为squares ,由返回findSquares()的函数squares.cpp (OpenCV的))。

我想在Point的矢量(用c ++语言)中存储四个点的x和y坐标的平均值。

我试着这样做:

    vector <Point> coordinates(4);

    for ( int i = 0; i<squares.size();i++) {

        coordinates[0].x += squares[i][0].x;
        coordinates[0].y += squares[i][0].y;

        coordinates[1].x += squares[i][1].x;
        coordinates[1].y += squares[i][1].y;

        coordinates[2].x += squares[i][2].x;
        coordinates[2].y += squares[i][2].y;

        coordinates[3].x += squares[i][3].x;
        coordinates[3].y += squares[i][3].y;
    } 
    if(squares.size() !=0){
        for( int j=0; j<4; j++) {
            coordinates[j].x /= squares.size();
            coordinates[j].y /= squares.size();
        }
    }

但是我得到了这个例外:

在此输入图像描述

我正在以错误的方式读取Point矢量向量的元素?

请注意以下代码:

if (squares.size() !=0){
    for( int j=0; j<4; j++) {
        coordinates[j].x /= squares.size();
        coordinates[j].y /= squares.size();
    }
}

squares.size()大于0但小于4时,此代码块可能会在coordinates[j].x处崩溃。

想象一下, squares.size()是2.当j变为2时,你认为它会在for循环中发生什么? 除法将成为coordinates[2].x /= squares.size(); ,它试图访问矢量中不存在的位置,导致崩溃。 请记住 :如果数组的大小为2,则向量的有效索引为0和1,因此2超出范围。

这是您的代码中的问题,可能是导致崩溃的原因。 要修复它,请将循环更新为:

    for (int j = 0; j < squares.size(); j++) {

如果崩溃继续发生,则问题出在代码中的其他位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM