我想表示一个图形数据结构,我在 c++ stl 中使用对向量的向量。例子:
vector<vector<pair<int, int>>> G;
现在我可以做, G[u].push_back(make_pair(v, w));
问题:我需要指定这个数据结构的大小。如果我不尝试将元素推送到此数据结构时,我会遇到分段错误。如果我确实给出如下尺寸:
vector< vector<ii> > adj(10, std::vector<ii>(10));
现在的问题是前 10 对向量被初始化为零。如果我现在推回一个元素,它会被推到第 11 个位置。前 10 个为 0。我不想这样做。我想按我需要的顺序插入元素。一个片段让您了解我正在尝试做的事情:
for(int i=0;i<E-1;i++)
{
cin >> p >> q >> l;
adj[p].push_back(ii(q, l));
adj[q].push_back(ii(p, l));
}
上面的输出将是 10 个零,后跟推送的值。有什么办法可以解决这个问题?
原文由 Abhishek Kusnoor 发布,翻译遵循 CC BY-SA 4.0 许可协议
不知何故,您自相矛盾:创建向量时,您可以在构造函数中传递元素的数量,也可以从空向量开始,然后将要在向量中包含的元素推入。如果您从 10 号开始,然后再推 10 号,则有 20 号。他们的方法是使用
或者
也许您将向量的大小与其容量混淆了。您可以通过以下方式设置:
对于您的向量向量,您必须确保在开始将元素推入其中之前,该索引处有一个向量: