向量数组C ++

时间:2015-10-09 07:47:25

标签: c++ vector

如果" 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循环结束后,我在控制台上出现了分段错误。

2 个答案:

答案 0 :(得分:3)

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

否则您有未定义的行为。

以这种方式直接使用输入值不是一个好主意。添加验证输入值的逻辑。即,他们处于所需的范围内。

答案 1 :(得分:2)

你需要这样的东西:

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]