I don't like it. Here is why.
1. You can only use a size_t type as the vertex type. What about
strings?
2. The distinction between directed and undirected graphs is made
with an boolean type parameter? Why not an enum? Better yet, why
not just use interfaces? (You are already using classes and
garbage collected memory.)
3. I have to control the graph's capacity manually, and I can't
use arbitrary numbers for edges.
4. Adding an edge doesn't add vertices.
My most common use of graphs is to start from nothing, build from
adding edges arbitrarily, usually from IDs which may be integers,
and may be strings, and then use graph algorithms to gain some
understanding of the relation between objects mapped to these
IDs. With this library, this will be difficult or impossible.