【发布时间】:2017-04-21 12:45:34
【问题描述】:
上下文:我正在网络中实现 MaxFlow 的 Push-Relable 算法,并希望跟踪所有节点的标签,对于每个可能的标签 (2*V-1 many) 我想要一个包含具有该标签的节点。
所以我有一个向量,其中每个条目都是一个列表。现在我需要从一个列表中删除一个元素并将其移动到另一个向量条目中的另一个列表中。
为了做到这一点,我使用了一个向量(其大小等于元素的数量),其中每个条目都是一个插入器,所以我总是知道每个元素的位置。
在更大规模地实施它之前,我想尝试一下它是否有效。所以我创建了两个向量,将一个元素添加到列表中,将迭代器存储在另一个向量中并尝试再次删除该元素。
但是std::vector::erase() 方法总是让我遇到 SegFaults。我错过了什么吗?
int V=50;
int i=0, v=42;
vector<list<int> > B(2*V-1);
vector<list<int>::iterator> itstorage(V) ;
B[i].push_back(v);
itstorage[v]=B[i].end();
B[i].erase(itstorage[v]);
【问题讨论】:
标签: c++ list vector linked-list iterator