home *** CD-ROM | disk | FTP | other *** search
-
- The present implementation reflects the version of the STL document
- dated: August 18, 1994.
-
- It has many minor differences from the previous versions. The most
- significant are:
-
- - inclusion of reference types in the allocators and containers;
- - inclusion of the reverse iterator type and rbegin(), rend()
- functions in the containers;
- - inclusion of swap function in the containers;
- - elimination of empty and restrictor throughout.
-
- To illustrate how to use allocators, several types of allocators and
- containers using them are included.
-
- The new version of STL has been compiled on:
-
- Borland 4.0
- Lucid 3.2
- EDG
- IBM xlC
- IBM C set
-
- It would take an effort to port this code to a cfront based
- compilers (e.g. HP). We have no experience with G++.
-
- There are some cases on which any of these compilers do not compile STL
- code, but it is usually corner cases. Moreover, on Borland, for
- example, STL does not compile the same cases on which Borland's own
- library does not compile.
-
- We did not have time to put the ifdefs that will work around different
- compiler bugs. The code is "generic" with only some workarounds for
- the Borland compiler in it.
-
- Users of Borland need to either comment out the definitions of min and
- max in algobase.h or comment out Borland's min and max in stdlib.h.
-
- You might encounter the following compiler problems:
-
- 1. functions that take const T & as an argument do not match arguments
- of type T&. (Happens with max and min, for example.) The error
- messages on Borland say "Illegal structure operation in ...". Three
- possible workarounds are:
- - replacing const T& with T&;
- - replacing const T& with T;
- - providing a manual instantiation of an offending function.
-
- 2. Compiler matches templates incorrectly. That happens often if
- different memory models are used together. copy, for example, is
- instantiated for int* and then the same instance is used for copy(int
- __huge *, ...). This bug is very hard to catch, because it is only run
- time detectable. (Occasionally it might be indicated with a warning:
- "Suspicious pointer conversion".)
-
- 3. destroy does not work for your built-in type. (Most compilers have
- a variant of this one.) As a workaround, provide your own destroy for
- the type. (We include many of them in defalloc.h)
-
-
- The only non-implemented parts of the STL as described in the document
- are:
-
- 1) Constructor templates and insert templates for containers taking
- two arbitrary iterators. They are simulated by a constructors taking
- pointers.
-
- 2) Parameterization of containers with a template allocator is
- simulated with the help of cpp.
-
- 3) Since bool is not yet implemented as a type on most compilers -
- vector<bool> is impemented as bit_vector.
-
- 4) Default template arguments have to be always explicitly given.
-
- The total amount of code that would need to be re-written when the
- corresponding features are supported is of the order of 20 lines.
-
-
- We intend to keep improving the implementation. Therefore, we would
- appreciate your comments and algorithmic bug reports. Please send them
- to:
-
- stepanov@hpl.hp.com
-
- or to:
-
- lee@hpl.hp. com
-
- or to:
-
- musser@cs.rpi.edu
-
- Please do not send us reports of compiler bugs. Report them to your
- compiler vendor.
-
- The following files are included:
-
- algo.h - includes all the algorithms
- algobase.h - auxiliary file
- bool.h - simulates bool
- bvector.h - bit_vector
- defalloc.h - allocator
- deque.h - deque
- doc.bar.ps - postscript of the document with change bars from the previous
- version of the document
- doc.ps - postscript of the document
- faralloc.h - far_allocator
- fdeque.h - far_deque
- flist.h - far_list
- fmap.h - far_map
- fmultmap.h - far_multimap
- fmultset.h - far_multiset
- fset.h - far_set
- function.h - operators, function objects and function adaptors
- hdeque.h - huge_deque
- heap.h - auxiliary file
- hlist.h - huge_list
- hmap.h - huge_map
- hmultmap.h - huge_multimap
- hmultset.h - huge_multiset
- hset.h - huge_set
- hugalloc.h - huge_allocator
- hvector.h - huge_vector
- iterator.h - iterator tags, stream iterators and iterator adaptors
- lbvector.h - long_bit_vector
- ldeque.h - long_deque
- list.h - list
- llist.h - long_list
- lmap.h - long_map
- lmultmap.h - long_multimap
- lmultset.h - long_multiset
- lngalloc.h - long_allocator
- lset.h - long_set
- map.h - map
- multimap.h - multimap
- multiset.h - multiset
- neralloc.h - near_allocator
- nmap.h - near_map
- nmultmap.h - near_multimap
- nmultset.h - near_multiset
- nset.h - near_set
- pair.h - pair
- projectn.h - auxiliary file
- random.cpp - random number generator. It should be compiled and
- linked if random_shuffle is used.
- set.h - set
- stack.h - container adaptors
- tempbuf.cpp - an auxiliary buffer for get_temporary_buffer; it should be
- compiled and linked if get_temporary_buffer, stable_partition,
- inplace_merge or stable_sort are used.
- tempbuf.h - get_temporary_buffer
- tree.h - auxiliary file
- vector.h - vector
-