
Dmitry Bufistov
Julius Ziegler escribió:
Dmitry Bufistov
writes: It strikes to me now that the matter is not so subtle at all, since add_vertex() with vecS is very likely to invalidate vertex_iterators (clearly contrary to the documentation). In my case the issue was a bit obscured since it is not perfectly clear that source(edge_descriptor) and target(edge_descriptor) use vertex_iterators. I had expected that edge_descriptor stores two vertex_descriptors. The problem is not with edge_descriptor it is in the operator++() of the edge_iterator class.
I think that edge_iterators are not directly affected, and its still save to use them to access, e.g., edge properties. Its also save to use operator++(). The problem is that calling source(...) on an edge descriptor dereferences a vertex_iterator, and THAT one may have been invalidated. Is that right?
Well, you can try to remove source() and target() calls from your example and to see if the problem is still reproducible.
The problem is still there! To reproduce (added "double" props to vertices and
edges):
#include <iostream>
#include