VMS Help
CXXLSTD, Containers, list

 *Conan The Librarian

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   list	- A sequence that supports bidirectional iterators

 SYNOPSIS

   #include <list>

   template <class T, class Allocator = allocator<T> >
   class	list;

 DESCRIPTION

   list<T,Allocator> is a type of sequence that supports	bidirectional
   iterators.	 A list<T,Allocator> allows constant time insert and
   erase operations anywhere within the sequence, with storage
   management handled automatically. Constant time random access is
   not supported.

   Any type used	for the	template parameter T must provide  the
   following (where T is the type,	t is a value of	T and u	is a
   const value of T):

    Default constructor	 T()
    Copy	constructors	 T(t) and T(u)
    Destructor		 t.~T()
    Address of		 &t and	&u yielding T* and
 			  const	T* respectively
    Assignment		 t = a where a is a
 			   (possibly const) value of T

 INTERFACE

   template <class T, class Allocator = allocator<T> >
   class	list {

   public:

   // typedefs

     class iterator;
     class const_iterator;
     typename reference;
     typename const_reference;
     typename size_type;
     typename difference_type;
     typedef T value_type;
     typedef Allocator allocator_type;

     typename reverse_iterator;
     typename const_reverse_iterator;

   // Construct/Copy/Destroy

     explicit list (const Allocator& = Allocator());
     explicit list (size_type, const Allocator& = Allocator());
     list (size_type, const T&, const Allocator&	= Allocator())
     template <class InputIterator>
     list (InputIterator, InputIterator,
 	  const	Allocator& = Allocator());
     list(const list<T, Allocator>& x);
      ~list();
     list<T,Allocator>& operator= (const	list<T,Allocator>&);
     template <class InputIterator>
      void assign (InputIterator, InputIterator);
     template <class Size, class	T>
      void assign (Size n);
     template <class Size, class	T>
      void assign (Size n, const	T&);

     allocator_type get allocator () const;

   // Iterators

     iterator begin ();
     const_iterator begin () const;
     iterator end ();
     const_iterator end () const;
     reverse_iterator rbegin ();
     const_reverse_iterator rbegin () const;
     reverse_iterator rend ();
     const_reverse_iterator rend	() const;

   // Capacity

     bool empty () const;
     size_type size () const;
     size_type max_size () const;
     void resize	(size_type);
     void resize	 (size_type, T);

   // Element Access

     reference front ();
     const_reference front () const;
     reference back ();
     const_reference back () const;

   // Modifiers

     void push_front (const T&);
     void pop_front ();
     void push_back (const T&);
     void pop_back ();

     iterator insert (iterator);
     iterator insert (iterator, const T&);
     void insert	(iterator, size_type, const T&);
     template <class InputIterator>
      void insert  (iterator, InputIterator, InputIterator);

     iterator erase (iterator);
     iterator erase (iterator, iterator);

     void swap (list<T, Allocator>&);
     void clear ();

   // Special mutative operations on list

     void splice	(iterator, list<T, Allocator>&);
     void splice	(iterator, list<T, Allocator>&,	iterator);
     void splice	(iterator, list<T, Allocator>&,	iterator, iterator);

     void remove	(const T&);
     template <class Predicate>
      void remove_if (Predicate);

     void unique	();
     template <class BinaryPredicate>
      void unique (BinaryPredicate);

     void merge (list<T,	Allocator>&);
     template <class Compare>
      void merge	(list<T, Allocator>&, Compare);

     void sort ();
     template <class Compare>
      void sort (Compare);

     void reverse();
   };

   // Non-member	List Operators

   template <class T, class Allocator>
   bool operator== (const list<T, Allocator>&,
 		   const list<T, Allocator>&);

   template <class T, class Allocator>
   bool operator!= (const list<T, Allocator>&,
 		   const list<T, Allocator>&);

   template <class T, class Allocator>
   bool operator< (const	list<T,	Allocator>&,
 		  const	list<T,	Allocator>&);

   template <class T, class Allocator>
   bool operator> (const	list<T,	Allocator>&,
 		  const	list<T,	Allocator>&);

   template <class T, class Allocator>
   bool operator<= (const list<T, Allocator>&,
 		  const	list<T,	Allocator>&);

   template <class T, class Allocator>
   bool operator>= (const list<T, Allocator>&,
 		  const	list<T,	Allocator>&);

   // Specialized Algorithms

   template <class T, class Allocator>
   void swap (list<T,Allocator>&, list<T, Allocator>&);

 CONSTRUCTORS AND DESTRUCTORS

   explicit list(const Allocator& alloc = Allocator());
      Creates a list of zero elements. The list will use	the allocator
      alloc for all storage management.

   explicit list(size_type n,
 		const Allocator& alloc = Allocator());
 		   Creates a list of length n, containing n copies of the
 		   default value for type T. Requires that T have a default
 		   constructor.	The list will use the allocator	alloc for
                    all storage management.

   list(size_type n, const T& value,
        const Allocator&	alloc =	Allocator());
 	  Creates a list of length n, containing n copies of value. The
           list will use the allocator alloc for all storage management.

   template <class InputIterator>
   list(InputIterator first, InputIterator last,
        const Allocator&	alloc =	Allocator());
 	  Creates a list of length last	- first, filled	with all values
 	  obtained by dereferencing the	InputIterators on the range [first,
 	  last). The list will use the allocator alloc for all storage
 	  management.

   list(const list<T, Allocator>& x);
      Copy constructor.	Creates	a copy of x.

   ~list();
      The destructor. Releases any allocated memory for this list.

 ASSIGNMENT OPERATOR

   list<T, Allocator>&
   operator=(const list<T, Allocator>& x)
      Erases all	elements in self then inserts into self	a copy of each
      element in x. Returns a reference to *this.

 ALLOCATOR

   allocator_type
   get_allocator() const;
      Returns a copy of the allocator used by self for storage management.

 ITERATORS

   iterator
   begin();
      Returns a bidirectional iterator that points to the first element.

   const_iterator
   begin() const;
      Returns a constant	bidirectional iterator that points to the first
      element.

   iterator
   end();
      Returns a bidirectional iterator that points to the past-the-end
      value.

   const_iterator
   end()	const;
      Returns a constant	bidirectional iterator	that  points to	the
      past-the-end value.

   reverse_iterator
   rbegin();
      Returns a bidirectional iterator that points to the past-the-end
      value.

   const_reverse_iterator
   rbegin() const;
      Returns a constant	bidirectional iterator that points to the
      past-the-end value.

   reverse_iterator
   rend();
      Returns a bidirectional iterator that points to the first element.

   const_reverse_iterator
   rend() const;
      Returns a constant	bidirectional iterator that  points to the first
      element.

 MEMBER FUNCTIONS

   template <class InputIterator>
   void
   assign(InputIterator first, InputIterator last);
      Erases all	elements contained in self, then inserts new elements
      from the range [first, last).

   template <class Size,	class T>
   void
   assign(Size n);
      Erases all	elements contained in self, then inserts n instances of
      the default value of t.

   template <class Size,	class T>
   void
   assign(Size n, const T& t);
      Erases all	elements contained in self, then inserts n instances of
      the value of t.

   reference
   back();
      Returns a reference to the	last element.

   const_reference
   back() const;
      Returns a constant	reference to the last element.

   void
   clear();
      Erases all	elements from the list.

   bool
   empty() const;
      Returns true if the size is zero.

   iterator
   erase(iterator position);
      Removes the element pointed to by position. Returns an iterator
      pointing to the element following the deleted element, or end() if
      the deleted item was the last one in this list.

   iterator
   erase(iterator first,	iterator last);
      Removes the elements in the range (first, last). Returns an
      iterator pointing to the element following the element following
      the last  deleted element, or end() if there	were no
      elements after the deleted  range.

   reference
   front();
      Returns a reference to the	first element.

   const_reference
   front() const;
      Returns a constant	reference to the first element.

   iterator
   insert(iterator position);
      Inserts a copy of the default value for type T before position.
      Returns an	iterator that points to	the inserted value. Requires
      that  type T have a default constructor.

   iterator
   insert(iterator position, const T& x);
      Inserts x before position.	 Returns an iterator that points to the
      inserted x.

   void
   insert(iterator position, size_type n, const T& x);
      Inserts n copies of x before position.

   template <class InputIterator>
   void
   insert(iterator position, InputIterator first,
 	 InputIterator last);
 	    Inserts copies of the elements in the range	[first,	last)
             before position.

   size_type
   max_size() const;
      Returns size() of the largest possible list.

   void merge(list<T, Allocator>& x);
      Merges a sorted x with a sorted self using	operator<.  For	equal
      elements in the two lists, elements from self will always precede
      the elements from	x.  The	merge function leaves x	empty.

   template <class Compare>
   void
   merge(list<T,	Allocator>& x, Compare comp);
      Merges a sorted x with sorted self	using a	 compare function
      object,comp.  For	same elements in the two lists,	elements from
      self will always precede the elements from x.  The merge function
      leaves x empty.

   void
   pop_back();
      Removes the last element.

   void
   pop_front();
      Removes the first element.

   void
   push_back(const T& x);
      Appends a copy of x to the	end of the list.

   void
   push_front(const T& x);
      Appends a copy of x to the	front of the list.

   void
   remove(const T& value);
   template <class Predicate>
   void
   remove_if(Predicate pred);
      Removes all elements in the list referred by the list iterator i
      for which *i == value or pred(*i) == true, whichever is applicable.
      This is a stable operation, the relative order of list items  that
      are not removed is	preserved.

   void
   resize(size_type sz);
      Alters the	size of	self.  If the new size ( sz ) is greater than
      the current size, sz-size() copies of the default value of type T
      are inserted at the end of the list.  If the new size is smaller
      than  the current capacity, then the list is truncated by erasing
      size()-sz  elements off the end. Otherwise,  no action is taken.
      Requires that type T have a default constructor.

   void
   resize(size_type sz, T c);
      Alters the	size of	self.  If the new size ( sz ) is greater than
      the current size, sz-size() c's are inserted at the end of the
      list.  If the new size is smaller than the current capacity, then
      the list is truncated by erasing size()-sz elements off the end.
      Otherwise,  no action is taken.

   void
   reverse();
      Reverses the order	of the elements.

   size_type
   size() const;
      Returns the number	of elements.

   void
   sort();
      Sorts self	according to the  operator<.  sort  maintains the
      relative order of equal elements.

   template <class Compare>
   void
   sort(Compare comp);
      Sorts self	according to a comparison function object, comp.
      This is also a stable sort.

   void
   splice(iterator position, list<T, Allocator>&	x);
      Inserts x before position leaving x empty.

   void
   splice(iterator position, list<T, Allocator>&	 x, iterator i);
      Moves the elements	pointed	to by iterator i in x to self,
      inserting  it before position.  The element is removed from x.

   void
   splice(iterator position, list<T, Allocator >&  x,
 	 iterator first, iterator last);
      Moves the elements in the range [first, last) in x to self,
      inserting before position.	The elements in	 the range
      [first,last) are removed from x.

   void
   swap(list <T,	Allocator>& x);
      Exchanges self with x.

   void
   unique();
      Erases copies of consecutive repeated elements leaving the	first
      occurrence.

   template <class BinaryPredicate>
   void
   unique(BinaryPredicate binary_pred);
      Erases consecutive	elements matching a true condition of the
      binary_pred.  The first occurrence	is not removed.

 NON-MEMBER OPERATORS

   template <class T, class Allocator>
   bool operator==(const	list<T,	Allocator>& x,
 		  const	list<T,	Allocator>& y);
      Equality operator.	Returns	true if	x is the same  as y.

   template <class T, class Allocator>
   bool operator!=(const	list<T,	Allocator>& x,
 		  const	list<T,	Allocator>& y);
      Inequality	operator. Returns !(x==y).

   template <class T, class Allocator>
   bool operator<(const list<T, Allocator>& x,
 		 const list<T,Allocator>& y);
      Returns true if the	sequence defined by the	elements
      contained in x is lexicographically less than the  sequence
      defined by the elements contained in y.

   template <class T, class Allocator>
   bool operator>(const list<T, Allocator>& x,
 		 const list<T,Allocator>& y);
 		    Returns y <	x.

   template <class T, class Allocator>
   bool operator<=(const	list<T,	Allocator>& x,
 		 const list<T,Allocator>& y);
 		    Returns !(y	< x).

   template <class T, class Allocator>
   bool operator>=(const	list<T,	Allocator>& x,
 		 const list<T,Allocator>& y);
 		    Returns !(x	< y).

 SPECIALIZED ALGORITHMS

   template <class T, class Allocator>
   void swap(list<T, Allocator>&	a, list<T, Allocator>& b);
      Efficiently swaps the contents of a and b.

 EXAMPLE

   //
   // list.cpp
   //
    #include <list>
    #include <string>
    #include <iostream.h>
    // Print out	a list of strings
   ostream& operator<<(ostream& out, const list<string>&	l)
    {
     copy(l.begin(), l.end(),
 	 ostream_iterator<string,char>(cout," "));
     return out;
    }
   int main(void)
    {
      //	create a list of critters
     list<string> critters;
     int	i;
      //	insert several critters
     critters.insert(critters.begin(),"antelope");
     critters.insert(critters.begin(),"bear");
     critters.insert(critters.begin(),"cat");

      //	print out the list
     cout << critters <<	endl;

      //	Change cat to cougar
      *find(critters.begin(),critters.end(),"cat") = "cougar";
     cout << critters <<	endl;

      //	put a zebra at the beginning
      //	an ocelot ahead	of antelope
      //	and a rat at the end
     critters.push_front("zebra");
     critters.insert(find(critters.begin(),critters.end(),
 		     "antelope"),"ocelot");
     critters.push_back("rat");
     cout << critters <<	endl;

      //	sort the list (Use list's sort function	since the
      //	generic	algorithm requires a random access iterator
      //	and list only provides bidirectional)
     critters.sort();
     cout << critters <<	endl;

      //	now let's erase	half of	the critters
     int	half = critters.size() >> 1;
     for(i = 0; i < half; ++i) {
       critters.erase(critters.begin());
      }
     cout << critters <<	endl;
     return 0;
    }

   Output :
   cat bear antelope
   cougar bear antelope
   zebra	cougar bear ocelot antelope rat
   antelope bear	cougar ocelot rat zebra
   ocelot  rat zebra

 WARNINGS

   Member function templates are	used in	all containers provided	by the
   Standard C++ Library.  An example of this feature is the constructor
   for list<T, Allocator> that takes two templated iterators:

   template <class InputIterator>
   list (InputIterator, InputIterator,
        const Allocator&	= Allocator());

   list also has	an insert function of this type.  These	functions,
   when	not restricted by compiler limitations, allow you to use any
   type	of input iterator as arguments.  For compilers	that do	not
   support this feature, we provide substitute functions that allow you
   to use an iterator obtained from the same type of container as the
   one  you are constructing (or calling a member function on), or you
   can  use a pointer to the type of element you have in the container.

   For example, if your compiler	does not support member	 function
   templates you can construct a list in the following two ways:

   int intarray[10];
   list<int> first_list(intarray,intarray + 10);
   list<int> second_list(first_list.begin(),first_list.end());

   But not this way:

   list<long> long_list(first_list.begin(),first_list.end());

   since	the long_list and first_list are not the same type.

   Additionally,	list provides a	merge function of this type.

   template <class Compare> void	merge (list<T, Allocator>&,
    Compare);

   This function	allows you to specify a	compare	function object	to
   be used in merging two lists.  In this case, we were unable to
   provide a substitute function in addition to the merge that uses
   the operator< as the default. Thus,	if your	compiler does not
   support member function templates, all list mergers will use
   operator<.

   Also,	many compilers do not support default template arguments.
   If your compiler is one of these, you	need to	always supply the
   Allocator template argument. For instance, you'll have to write:

   list<int, allocator<int> >

   instead of:

   list<int>

 SEE ALSO

   allocator, Containers, Iterators

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee
  Close     Help