如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"
How to fix "Debug Assertion Failed" "vector subscript out of range" in Adjacency List
我正在尝试实现从文件中调用值的图形的邻接列表表示形式,前两个数字分别是顶点数和边数。接下来的行包含边的端点。
例如:
5 6
1 2
2 3
3 1
2 4
4 5
5 2
struct Edge {
int src, dest;
};
class Graph
{
public:
vector<vector<int>> adjList;
Graph(vector<Edge> const &edges, int N)
{
adjList.resize(N);
for (auto &edge : edges)
{
adjList[edge.src].push_back(edge.dest);
//adjList[edge.dest].push_back(edge.src);
}
}
};
int main(int argc, char **argv)
{
int vertices;
int num_edges;
vector<Edge> edges;
//string filename(argv[1]);
string filename("graph5.data");
ifstream readin;
readin.open(filename);
readin >> vertices >> num_edges;
for (int i = 0; i < num_edges; i++) {
int a, b;
readin >> a >> b;
edges.push_back({ a,b });
}
readin.close();
Graph graph(edges, vertices);
printGraph(graph, vertices);
return 0;
}
我收到一条错误消息,内容如下:
"调试断言失败!
程序: C.....
表达式:向量下标超出范围">
并在"adjList[edge.src].push_back(edge.dest(;"抛出异常。
我相信我的矢量存在大小调整错误,但我不确定在哪里以及如何修复它。
这更像是一个注释,但是当您将 adjList 调整为 N(现在为 5(时,它包含从 adjList[0] 到 adjList[4] 的 5 个向量。现在,当你有一个边缘 5 2 时,你的代码会尝试将其插入到 adjList[5] 中,而 adjList[5] 不存在。
所以试着改变
adjList[edge.src].push_back(edge.dest)
自
adjList[edge.src-1].push_back(edge.dest)
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- std::vector的包装器,使数组的结构看起来像结构的数组
- 为什么(-1)%vector::size()总是返回0
- 在C++中将类(带有Vector成员)保存为二进制文件
- 编译器如何区分std::vector的构造函数
- 将 int 数组转换为 std::vector<int*>
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在std::vector上存储带有模板的类实例
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 为什么std::vector比数组慢
- std::vector::迭代器是否可以合法地作为指针
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"