*Learning objectives*

The class d_int_set |

To be able to use the class
`int_set`, we must know maximum and
minimum of the numbers to be stored in advance. However, there
are situations in which this is not possible or in which their
computation would mean too much overhead. The class
`d_int_set` is of advantage in these
cases. It enlarges its underlying bit vector automatically if
the minimum or the maximum changes. So these values do not
have to be specified at the definition.

Suppose it is not possible to read the file
`SomeInts.txt` from the previous program
example twice. So we must get by on one single pass over the
numbers. This means that we cannot determine minimum and
maximum in a first step in order to insert the numbers in an
appropriately large `int_set`
afterwards. We therefore use a
`d_int_set` into which we immediately
store every number at the first read. If we meet a new
minimum or maximum, this class is clever enough to adjust its
interval.

#include <LEDA/d_int_set.h> #include <fstream> #include <iostream> using leda::d_int_set; int main() { std::ifstream is("Data/SomeInts.txt"); int n; d_int_set S; while (is >> n) S.insert(n); for(int i = S.min(); i <= S.max(); i++) if(S.member(i)) std::cout << i << "\n"; }

Unlike the class `int_set`,
the constructor of `d_int_set` does not
need the specification of minimum and maximum:

d_int_set S;

The class `d_int_set` has exactly the
same, powerful interface as the class `set`
*and* the efficiency of the class `int_set`. So
the advantages of both latter classes can be combined if integer
numbers must be stored.

The class `d_int_set`, like the
class `int_set`, is implemented by bit
vectors of C++. The running times of the individual operations
are the same as those of the class
`int_set`.

One finds more information about the class
`d_int_set` on the corresponding manual page.