我的目的是创建一个邻接表来表示图,我选择使用向量来完成。我的问题是图形的顶点和边的数量并不总是相同的,而是在输入中给出的。因此,我尝试动态声明向量数组。这是我的代码(其中N代表边数):
int N;
vector <int> *arr;
arr = new vector <int> [N];
cin >> N;`
[每次我尝试处理向量(ig arr[0].push_back(3);
)时,都会遇到分割错误。我在做什么错了:(
如果需要动态N
,则可以使用向量代替数组:
std::vector<std::vector<int>> arr(N);
arr[42].push_back(42);
还请确保已初始化您的N
变量,否则您将在arr
上遇到超出范围的访问,这很可能是段错误的原因。
您快要在那里了;但是您正在使用它读取N after。 C ++程序逐行执行,因此当涉及到new vector <int> [N]
时,尚未读取值N
!在C ++术语中,N是uninitialized variable,它是undefined behavior的形式。与大多数其他语言不同,在C ++中,编写无意义的程序非常容易,并且编译器不会阻止您(尽管它可能会发出警告-请注意那些!)。
如果将cin >> N;
移至new vector <int> [N]
之前会更好,但是,有更好的解决方法...
代替原始数组,具有向量vector更为习惯。它更安全也更容易:
std::vector<std::vector<int>> arr;
int n;
cin >> n;
arr.resize(n);
// now you can start filling it...
arr[0].push_back(3);
// . . .