2016-05-16 73 views
-8

我一直在尝试使用向量,但是无论何时我全局声明它们,我都会遇到分段错误(核心转储)错误。但是,当我在声明的矢量上指定大小时,错误不再发生。如果向量中发生动态分配,那么为什么需要给出一个大小以及这个错误是什么?请有人解释一下。声明向量时出现分段错误(核心转储)

的代码用于执行使用矢量邻接表(图)的:

#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; 
    } 
+0

为什么当vector是一个'C++'类时,你将它标记为'C'?另外,请显示您的代码。 – PaulMcKenzie

+7

你的问题是“我写了一些代码,它不起作用,请解释一下”。没有代码 - >没有帮助! – John3136

回答

0

std::vector不会自动调整,当你索引它。您需要使用resize手动调整它的大小。

相关问题