Array of Vectors C++

Array of Vectors C++

本文关键字:C++ Vectors of Array      更新时间:2023-10-16

如果"no_vertices"的值大于2,我将得到分割错误。代码如下

vector<int> a[no_vertices];
for(int i=1;i<=no_vertices-1;i++)
{
    int v1,v2;
    cin>>v1>>v2;
    a[v1].push_back(v2);
    a[v2].push_back(v1);
}

我正在尝试使用邻接表制作一个双向图。所以我试着用一个向量数组。但是,在输入所有值后,即在for循环结束后,我在控制台中得到分段错误。

由于输入值用于索引,因此每次迭代的输入值必须在0到no_vertices -1的范围内。

否则会出现未定义行为。

以这种方式直接使用输入值不是一个好主意。添加验证输入值的逻辑。也就是说,它们在要求的范围内

你需要这样做:

vector<vector<int>> a(no_vertices, vector<int>());
for (int i = 0; i < no_vertices; i++)
{
    int v1, v2;
    cin >> v1 >> v2;
    if (v1 < 0 || v1 >= no_vertices || v2 < 0 || v2 >= no_vertices)
    {
        cout << "incorrect value!" << endl;
        continue;
    }
    a[v1].push_back(v2);
    a[v2].push_back(v1);
}

确保您的v1和v2值在范围内:[0, no_vertices - 1]