我一直在尝试使用向量,但是每当我全局声明它们时,我会得到一个分段错误(核心转储)错误。但是当我在我声明的向量上指定一个大小时,错误不再发生。如果动态分配发生在向量中,那么为什么需要给出一个大小?这个错误是什么?请有人解释一下。
该代码用于使用向量实现邻接列表(图):
#include <iostream>
#include <vector>
using namespace std;
typedef vector< int > vi;
typedef vector< vi > vii;
vii adjlist;
int main()
{
int n,m; // no. of vertices and no. of edges
cin>>n>>m;
for(int i =0;i<m;i++)
{
int p,q;
cin>>p>>q;
adjlist[p].push_back(q);
adjlist[q].push_back(p);
}
for(int i =0;i<n;i++)
{
cout<<i;
for(int j =0; j< (int)adjlist[i].size();++i)
{
cout<<"_>"<<adjlist[i][j];
}
cout<<endl;
}
return 0;
}
2条答案
按热度按时间wpx232ag1#
std::vector
不会在索引时自动调整大小。您需要使用resize
手动调整大小。u5rb5r592#
你需要到resize你vector之前使用象
vector[i]
.为这你能使用resize
函数定义在stl vector class
.例如
对于
n x m
向量,使用vector_name.resize(n,vector<int>(m))
。