我的目的是创建一个邻接表来表示图,而我选择使用 vector 来完成。我的问题是图形的顶点和边的数量并不总是相同的,而是在输入中给出的。因此,我尝试动态声明 vector 数组。这是我的代码(其中N代表边数):
int N;
vector <int> *arr;
arr = new vector <int> [N];
cin >> N;`
每次我尝试处理 vector (ig
arr[0].push_back(3);
)时,都会遇到分割错误。我究竟做错了什么 :(编辑:N代表节点而不是边缘的数量。这不会影响分割错误,只会影响用 vector 表示图的方式
最佳答案
你快到了;但使用它后您正在读取N。 C++程序逐行执行,因此当涉及new vector <int> [N]
时,尚未读取N
值!用C++术语,然后使用一个未初始化的变量,它是undefined behavior的一种形式。与大多数其他语言不同,在C++中,编写无意义的程序非常容易,并且编译器不会阻止您(尽管它可能会发出警告-请注意那些!)。
如果将cin >> N;
移到new vector <int> [N]
之前,则效果会更好,但是,等等,还有更好的解决方案...
代替原始数组,拥有 vector vector更为习惯。它更安全也更容易:
std::vector<std::vector<int>> arr;
int n;
cin >> n;
arr.resize(n);
或者在知道
n
之后简单地声明 vector :int n;
cin >> n;
std::vector<std::vector<int>> arr(n);
关于c++ - 我无法动态声明 vector 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61394738/