我对此代码有疑问。我尝试创建一个结构“点”,其中有一个相同结构的 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/