包含自身向量的结构

时间:2017-08-07 18:54:24

标签: c++ vector struct

我的代码有问题。我尝试创建一个结构" point"其中有一个相同结构的向量。如果N很小(1,2,3)则没有问题并且程序正确执行,而如果N足够大(10..100),编译器会返回此错误:

  

在抛出' std :: bad_alloc'
的实例后终止调用   what():std :: bad_alloc

我已经看过这个主题How to create a structure which contains a list of itself?,它说这是合法的,在一个结构中放入一个引用该结构的向量。非常感谢帮助。谢谢!

#include <iostream>
#include <vector>

using namespace std;

struct point{

    int a;
    int b;
    vector<point> near;

};

int main()
{

    int N = 100;
    vector<vector<point>> a;

    a.resize(N);
    for ( int i = 0; i<N; i++){
        a[i].resize(N);
    }

    for ( int i = 0; i<N; i++){
        for ( int j=0; j<N; j++){

                a[i][j].near.reserve(4);
                if ( i+1< N) {a[i][j].near.push_back(a[i+1][j]);}
                if ( i-1>=0) {a[i][j].near.push_back(a[i-1][j]);}
                if ( j+1< N) {a[i][j].near.push_back(a[i][j+1]);}
                if ( j-1>=0) {a[i][j].near.push_back(a[i][j-1]);}

        }
    }

    return 0;
}

Windows 10 - Code :: blocks 16.01。

1 个答案:

答案 0 :(得分:3)

你的内存不足。

执行以下操作时:

if ( i+1< N) {a[i][j].near.push_back(a[i+1][j]);}

您正在递归地复制a[i+1][j],包括其near向量的内容!

因此,当你点击第10000个节点时,你正在复制很多向量。

您可能希望将邻居存储为指针:

struct point{
    int a;
    int b;
    vector<point *> near;
};

...
if ( i+1< N) {a[i][j].near.push_back(&a[i+1][j]);}
...
相关问题