# IteratorConstructibleGraph

IteratorConstructibleGraph のコンセプトは、 辺イテレータの一種を用いて生成されるグラフの型へのインタフェースを示す。 辺イテレータは グラフ上の辺を表す 整数値の組 (i,j) を間接参照する InputIterator であればよい。 2つの整数値 i と j は頂点を表し、 0 <= i < |V| かつ 0 <= j < |V| である。 辺イテレータの指す値の型は`std::pair<T,T>` (または、少なくとも `first` と `second` のメンバを持つ構造体) で、その組の 型 `T` は グラフの `vertices_size_type` (つまり整数型)に変換可能でなければならない。 このコンセプトに要求される有効な式は2つあり、 どちらもコンストラクタである。 1つ目はグラフのオブジェクトをイテレータの 開始/終了 範囲から生成する。 2つ目は同じく、イテレータの 開始/終了 範囲と更に、 頂点の数、辺の数を必要とする。 グラフと辺イテレータによっては、 2つ目のコンストラクタが1つ目のよりも効率的な場合もある。

### Example

次にある例では2つのグラフのオブジェクトを辺(頂点の組)の配列から生成している。 型 `Edge*` はInputIterator に対する要求を満たし、 よって、グラフの生成に使用することが出来る。

      typedef ... IteratorConstructibleGraph;
      typedef boost::graph_traits Traits;

      typedef std::pair Edge;
      Edge edge_array[] =
        { Edge(0,1), Edge(0,2), Edge(0,3), Edge(0,4), Edge(0,5),
          Edge(1, 2), Edge(1,5), Edge(1,3),
          Edge(2, 4), Edge(2,5),
          Edge(3, 2),
          Edge(4, 3), Edge(4,1),
          Edge(5, 4) };
      Edge* first = edge_array,
        last = edge_array + sizeof(edge_array)/sizeof(Edge);

      IteratorConstructibleGraph G1(first, last);
      // do something with G1 ...

      Traits::vertices_size_type size_V = 6;
      Traits::edges_size_type size_E = sizeof(edge_array)/sizeof(Edge);
      IteratorConstructibleGraph G2(first, last, size_V, size_E);
      // do something with G2 ...

### Refinement of

Graph

### Notation

`G` | IteratorConstructibleGraph のモデルであるグラフの型。
`g` | 型 `G` のオブジェクト。
`first, last` | 辺イテレータ(上記参照)。
`Tr` | 型 `graph_traits<G>` のオブジェクト。
`n_vertices` | 型 `Tr::vertices_size_type` のオブジェクト。
`n_edges` | 型 `Tr::edges_size_type` のオブジェクト。

### Valid Expressions

    G g(first, last);
グラフのオブジェクト `g` を辺の範囲 `[first,last)` から生成する。
    G g(first, last, n_vertices, n_edges);
グラフのオブジェクト `g` を辺の範囲 `[first,last)` と、 頂点数、辺数から生成する。 このコンストラクタの方が、 グラフのサイズ情報の無いコンストラクタより効率的な場合がある。

Copyright © 2000-2001 | Jeremy Siek, Indiana University (jsiek@osl.iu.edu) Lie-Quan Lee, Indiana University (llee@cs.indiana.edu) Andrew Lumsdaine, Indiana University (lums@osl.iu.edu)

Japanese Translation Copyright (C) 2003 KANAHORI Toshihiro <kanahori@k.tsukuba-tech.ac.jp>
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。