我对此代码有疑问。我尝试创建一个结构“点”,其中有一个相同结构的 vector 。如果N很小(1,2,3),则没有问题,程序可以正确执行;而如果N足够大(10..100),则编译器将返回以下错误:



我已经看到了How to create a structure which contains a list of itself?这个主题,它说在结构内部放置合法的 vector 是指向该结构的 vector 。非常感谢您的帮助。谢谢!

#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。

最佳答案

您的内存不足。

当您执行以下操作:

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

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

因此,到命中第10000个节点时,您正在复制很多 vector 。

您可能想将邻居存储为指针:
struct point{
    int a;
    int b;
    vector<point *> near;
};

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

关于c++ - 包含自身 vector 的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45553894/

10-11 22:46
查看更多