push_back到2D向量是seg faulting

时间:2018-02-01 18:50:18

标签: c++ vector

我正在尝试按x和y对点矢量进行排序,这样我的结果矢量将从左到右,从上到下读取。我最初的想法是只用一个然后另一个用无序向量进行排序,所以我决定按一个排序,然后将每个具有相同x坐标的点放入向量向量内的单独向量中。分割后,我将单独对每个向量进行排序。

我的其他if语句很复杂,因为我收集点的方式,这会产生不可避免的错误。

void sortPoints(vector<Point> coor, vector< vector<Point> >& output) {
    sort(coor.begin(), coor.end(), sortY);
    int j = 0;
    for(int i = 0; i < coor.size(); i++) {
        Point co = coor[i];
        if(i == 0) { output[j].push_back(co); }
        else if((co.x == coor[i-1].x) || ((co.x - 1) == coor[i-1].x) || 
            (co.x == (coor[i-1].x - 1)) || ((co.x - 2) == coor[i-1].x) || 
                (co.x == (coor[i-1].x - 2))) {
            output[j].push_back(co);
        }
        else j++;
    }
}

我知道在输出[j] .push_back(co)期间发生了seg故障。

我已查找语法,并确保我的声明是正确的,一切似乎都很好。我想也许是因为点矢量?任何帮助是极大的赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

发生了段错误,因为你没有推进向量向量,而是在

output[j].push_back(co);

您正试图进入vector<Point>output[j]。但是(我必须猜测,因为你没有显示你如何初始化output),看起来你没有在尝试使用它之前在j的位置创建一个向量。

您需要以下内容:

std::vector<Point> temp;
temp.push_back(co);
output.push_back(temp);