我不明白为什么这个简单的代码会出现分段错误。
#include <iostream>
using namespace std;
int main ()
{
vector <vector <int>> graph;
graph [0] = vector <int> ();
graph [0].push_back(0);
cout << graph[0][0];
}
答案 0 :(得分:1)
vector <vector <int>> graph;
graph [0] = vector <int> ();
因为您正在访问空向量的元素 0。首先,给它一些元素:
graph.emplace_back();
答案 1 :(得分:1)
您需要从一开始就使用 push_back
或调整 graph
的大小:
vector<vector<int>> graph;
graph.resize(1);
graph[0].push_back(0);
cout << graph[0][0];
答案 2 :(得分:1)
你声明了一个空向量
vector <vector <int>> graph;
因此您不能使用下标运算符来更改向量中不存在的元素。
你可以至少用一个元素来声明向量
vector <vector <int>> graph( 1 );
在这种情况下这个声明
graph [0] = vector <int> ();
将被删除,你可以写
graph [0].push_back(0);
cout << graph[0][0];
另一种方法是对初始对象使用另一种方法 push_back
。
vector <vector <int>> graph;
graph.push_back( {} );
graph [0].push_back(0);
cout << graph[0][0];