
On Fri, 18 Feb 2011, al.zatv wrote:
Jeremiah Willcock
писал(а) в своём письме Fri, 18 Feb 2011 01:47:39 +0300: There is graph::null_vertex, but no "null_edge".
It looks like you are correct. The BGL functions that can return non-existent edges return iterators instead, in which case edges(g).end() is a legitimate "null" return value. If you know the graph is non-empty, you can also return std::pair
, returning make_pair(*edges(g).first, false) for the "not found" case and make_pair(..., true) otherwise. Thank you for answer! I did it this way (for not founded edge) return make_pair( false, Graph::edge_descriptor() );
Am I correct?
No, that won't work in general; I believe there are graph types whose edge_descriptors are not default constructible.
But, I think, it will be much better if null_edge will be added to the library. It can be -1 for vector containers and null for pointer-based descriptors, etc.
It would be, but that would be a change to base concepts that may cause old graph types to fail with new algorithms that use null_edge(). What does your code that may return a null edge descriptor do? Would it be possible to return an iterator instead? -- Jeremiah Willcock