关于二维vector初始化
1.本篇主题以及问题描述
二维vector如果想使用下表或者迭代器,使用前必须要指定vector的size,否则会报错。
#include<vector>
// times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。
vector<vector<int>>times = [[2,1,1],[2,3,1],[3,4,1]];
// 下面需要根据times构建邻接图
2.错误案例
vector<vector<pair<int, int>>> graph; // 不初始化大小,直接报错
for(auto time : times){ //为了不浪费空间,对每个node-1以便从0开始
graph[time[0] - 1].emplace_back(time[1]-1, time[2]);
}
运行结果(报错)
Line 1034: Char 34: runtime error: applying non-zero offset 24 to null pointer (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:34
3.正确做法
vector<vector<pair<int, int>>> graph(4); // 为了能够使用下标,我们进行初始化大小
for(auto time : times){ //为了不浪费空间,对每个node-1以便从0开始
graph[time[0] - 1].emplace_back(time[1]-1, time[2]);
}