2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								<?xml version="1.0" encoding="utf-8" ?> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< html  xmlns = "http://www.w3.org/1999/xhtml"  xml:lang = "en"  lang = "en" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< head > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< meta  http-equiv = "Content-Type"  content = "text/html; charset=utf-8"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-27 04:13:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< meta  name = "generator"  content = "Docutils 0.3.1: http://docutils.sourceforge.net/"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< title > Counting Iterator< / title > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< meta  name = "author"  content = "David Abrahams, Jeremy Siek, Thomas Witt"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< meta  name = "organization"  content = "Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-15 00:06:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< meta  name = "date"  content = "2004-01-15"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2003-09-14 02:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< meta  name = "copyright"  content = "Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 04:17:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< link  rel = "stylesheet"  href = "default.css"  type = "text/css"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / head > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< body > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< div  class = "document"  id = "counting-iterator" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< h1  class = "title" > Counting Iterator< / h1 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "docinfo"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "docinfo-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "docinfo-content"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr > < th  class = "docinfo-name" > Author:< / th > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< td > David Abrahams, Jeremy Siek, Thomas Witt< / td > < / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr > < th  class = "docinfo-name" > Contact:< / th > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< td > < a  class = "first reference"  href = "mailto:dave@boost-consulting.com" > dave@ boost-consulting.com< / a > , < a  class = "reference"  href = "mailto:jsiek@osl.iu.edu" > jsiek@ osl.iu.edu< / a > , < a  class = "last reference"  href = "mailto:witt@ive.uni-hannover.de" > witt@ ive.uni-hannover.de< / a > < / td > < / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr > < th  class = "docinfo-name" > Organization:< / th > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< td > < a  class = "first reference"  href = "http://www.boost-consulting.com" > Boost Consulting< / a > , Indiana University < a  class = "reference"  href = "http://www.osl.iu.edu" > Open Systems
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Lab< / a > , University of Hanover < a  class = "last reference"  href = "http://www.ive.uni-hannover.de" > Institute for Transport
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Railway Operation and Construction< / a > < / td > < / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr > < th  class = "docinfo-name" > Date:< / th > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-15 00:06:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< td > 2004-01-15< / td > < / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< tr > < th  class = "docinfo-name" > Copyright:< / th > 
							 
						 
					
						
							
								
									
										
										
										
											2003-09-14 02:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< td > Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved< / td > < / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 13:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > abstract:< / th > < td  class = "field-body" > < p  class = "first" > How would you fill up a vector with the numbers zero
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 20:58:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								through one hundred using < tt  class = "literal" > < span  class = "pre" > std::copy()< / span > < / tt > ?  The only iterator
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								operation missing from builtin integer types is an
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tt  class = "literal" > < span  class = "pre" > operator*()< / span > < / tt >  that returns the current value of the integer.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The counting iterator adaptor adds this crucial piece of
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								functionality to whatever type it wraps.  One can use the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								counting iterator adaptor not only with integer types, but with
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 13:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								any incrementable type.< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p  class = "last" > < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  adapts an object by adding an < tt  class = "literal" > < span  class = "pre" > operator*< / span > < / tt >  that
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								returns the current value of the object. All other iterator operations
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								are forwarded to the adapted object.< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / td > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< div  class = "contents topic"  id = "table-of-contents" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p  class = "topic-title" > < a  name = "table-of-contents" > Table of Contents< / a > < / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< ul  class = "simple" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 16:10:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference"  href = "#counting-iterator-synopsis"  id = "id2"  name = "id2" > < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  synopsis< / a > < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference"  href = "#counting-iterator-requirements"  id = "id3"  name = "id3" > < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  requirements< / a > < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference"  href = "#counting-iterator-models"  id = "id4"  name = "id4" > < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  models< / a > < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference"  href = "#counting-iterator-operations"  id = "id5"  name = "id5" > < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  operations< / a > < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference"  href = "#example"  id = "id6"  name = "id6" > Example< / a > < / li > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / ul > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:53:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "counting-iterator-synopsis" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 16:10:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id2"  name = "counting-iterator-synopsis" > < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  synopsis< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< pre  class = "literal-block" > 
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								template < 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    class Incrementable
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  , class CategoryOrTraversal = use_default
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  , class Difference = use_default
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								> 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								class counting_iterator
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{
							 
						 
					
						
							
								
									
										
										
										
											2004-01-19 18:52:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								public:
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 19:01:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    typedef Incrementable value_type;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    typedef const Incrementable&  reference;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    typedef const Incrementable* pointer;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    typedef /* see below */ difference_type;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    typedef /* see below */ iterator_category;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    counting_iterator();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    counting_iterator(counting_iterator const&  rhs);
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    explicit counting_iterator(Incrementable x);
							 
						 
					
						
							
								
									
										
										
										
											2004-01-18 20:54:59 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    Incrementable const&  base() const;
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:53:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    reference operator*() const;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    counting_iterator&  operator++();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    counting_iterator&  operator--();
							 
						 
					
						
							
								
									
										
										
										
											2004-01-19 18:52:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								private:
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:53:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    Incrementable m_inc; // exposition
							 
						 
					
						
							
								
									
										
										
										
											2004-01-19 18:52:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								};
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / pre > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-15 00:01:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > If the < tt  class = "literal" > < span  class = "pre" > Difference< / span > < / tt >  argument is < tt  class = "literal" > < span  class = "pre" > use_default< / span > < / tt >  then
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tt  class = "literal" > < span  class = "pre" > difference_type< / span > < / tt >  is an unspecified signed integral
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 13:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								type. Otherwise < tt  class = "literal" > < span  class = "pre" > difference_type< / span > < / tt >  is < tt  class = "literal" > < span  class = "pre" > Difference< / span > < / tt > .< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-15 00:01:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > < tt  class = "literal" > < span  class = "pre" > iterator_category< / span > < / tt >  is determined according to the following
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								algorithm:< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< pre  class = "literal-block" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								if (CategoryOrTraversal is not use_default)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return CategoryOrTraversal
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								else if (numeric_limits< Incrementable> ::is_specialized)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return < a  class = "reference"  href = "iterator_facade.html#iterator-category" > < em > iterator-category< / em > < / a > (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        random_access_traversal_tag, Incrementable, const Incrementable& )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								else
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return < a  class = "reference"  href = "iterator_facade.html#iterator-category" > < em > iterator-category< / em > < / a > (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         iterator_traversal< Incrementable> ::type, 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         Incrementable, const Incrementable& )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / pre > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-18 20:54:59 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< dl > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< dt > [< em > Note:< / em >  implementers are encouraged to provide an implementation of< / dt > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< dd > < tt  class = "literal" > < span  class = "pre" > operator-< / span > < / tt >  and a < tt  class = "literal" > < span  class = "pre" > difference_type< / span > < / tt >  that avoids overflows in
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								the cases where < tt  class = "literal" > < span  class = "pre" > std::numeric_limits< Incrementable> ::is_specialized< / span > < / tt > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								is true.]< / dd > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / dl > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:53:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "counting-iterator-requirements" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 16:10:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id3"  name = "counting-iterator-requirements" > < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  requirements< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 14:10:54 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > The < tt  class = "literal" > < span  class = "pre" > Incrementable< / span > < / tt >  argument shall be Copy Constructible and Assignable.< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 13:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > If < tt  class = "literal" > < span  class = "pre" > iterator_category< / span > < / tt >  is convertible to < tt  class = "literal" > < span  class = "pre" > forward_iterator_tag< / span > < / tt > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								or < tt  class = "literal" > < span  class = "pre" > forward_traversal_tag< / span > < / tt > , the following must be well-formed:< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< pre  class = "literal-block" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Incrementable i, j;
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 13:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								++i;         // pre-increment
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								i == j;      // operator equal
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / pre > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 21:18:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > If < tt  class = "literal" > < span  class = "pre" > iterator_category< / span > < / tt >  is convertible to
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 13:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tt  class = "literal" > < span  class = "pre" > bidirectional_iterator_tag< / span > < / tt >  or < tt  class = "literal" > < span  class = "pre" > bidirectional_traversal_tag< / span > < / tt > ,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								the following expression must also be well-formed:< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< pre  class = "literal-block" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								--i
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / pre > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 21:18:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > If < tt  class = "literal" > < span  class = "pre" > iterator_category< / span > < / tt >  is convertible to
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 13:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tt  class = "literal" > < span  class = "pre" > random_access_iterator_tag< / span > < / tt >  or < tt  class = "literal" > < span  class = "pre" > random_access_traversal_tag< / span > < / tt > ,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								the following must must also be valid:< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< pre  class = "literal-block" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								counting_iterator::difference_type n;
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 13:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								i += n;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								n = i - j;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								i <  j;
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / pre > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 21:18:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "counting-iterator-models" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id4"  name = "counting-iterator-models" > < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  models< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 13:36:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > Specializations of < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  model Readable Lvalue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Iterator. In addition, they model the concepts corresponding to the
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 14:22:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								iterator tags to which their < tt  class = "literal" > < span  class = "pre" > iterator_category< / span > < / tt >  is convertible.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Also, if < tt  class = "literal" > < span  class = "pre" > CategoryOrTraversal< / span > < / tt >  is not < tt  class = "literal" > < span  class = "pre" > use_default< / span > < / tt >  then
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  models the concept corresponding to the iterator
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								tag < tt  class = "literal" > < span  class = "pre" > CategoryOrTraversal< / span > < / tt > .  Otherwise, if
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tt  class = "literal" > < span  class = "pre" > numeric_limits< Incrementable> ::is_specialized< / span > < / tt > , then
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  models Random Access Traversal Iterator.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Otherwise, < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  models the same iterator traversal
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								concepts modeled by < tt  class = "literal" > < span  class = "pre" > Incrementable< / span > < / tt > .< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-14 17:04:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > < tt  class = "literal" > < span  class = "pre" > counting_iterator< X,C1,D1> < / span > < / tt >  is interoperable with
							 
						 
					
						
							
								
									
										
										
										
											2004-01-15 00:06:57 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tt  class = "literal" > < span  class = "pre" > counting_iterator< Y,C2,D2> < / span > < / tt >  if and only if < tt  class = "literal" > < span  class = "pre" > X< / span > < / tt >  is
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								interoperable with < tt  class = "literal" > < span  class = "pre" > Y< / span > < / tt > .< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 21:18:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "counting-iterator-operations" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 16:10:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id5"  name = "counting-iterator-operations" > < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  operations< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:53:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > In addition to the operations required by the concepts modeled by
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt > , < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  provides the following
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								operations.< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< p > < tt  class = "literal" > < span  class = "pre" > counting_iterator();< / span > < / tt > < / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 14:10:54 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Requires:< / th > < td  class = "field-body" > < tt  class = "literal" > < span  class = "pre" > Incrementable< / span > < / tt >  is Default Constructible.< / td > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 02:58:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Effects:< / th > < td  class = "field-body" > Default construct the member < tt  class = "literal" > < span  class = "pre" > m_inc< / span > < / tt > .< / td > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p > < tt  class = "literal" > < span  class = "pre" > counting_iterator(counting_iterator< / span >  < span  class = "pre" > const& < / span >  < span  class = "pre" > rhs);< / span > < / tt > < / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 02:58:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Effects:< / th > < td  class = "field-body" > Construct member < tt  class = "literal" > < span  class = "pre" > m_inc< / span > < / tt >  from < tt  class = "literal" > < span  class = "pre" > rhs.m_inc< / span > < / tt > .< / td > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > < tt  class = "literal" > < span  class = "pre" > explicit< / span >  < span  class = "pre" > counting_iterator(Incrementable< / span >  < span  class = "pre" > x);< / span > < / tt > < / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 02:58:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Effects:< / th > < td  class = "field-body" > Construct member < tt  class = "literal" > < span  class = "pre" > m_inc< / span > < / tt >  from < tt  class = "literal" > < span  class = "pre" > x< / span > < / tt > .< / td > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p > < tt  class = "literal" > < span  class = "pre" > reference< / span >  < span  class = "pre" > operator*()< / span >  < span  class = "pre" > const;< / span > < / tt > < / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:53:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Returns:< / th > < td  class = "field-body" > < tt  class = "literal" > < span  class = "pre" > m_inc< / span > < / tt > < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p > < tt  class = "literal" > < span  class = "pre" > counting_iterator& < / span >  < span  class = "pre" > operator++();< / span > < / tt > < / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:53:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Effects:< / th > < td  class = "field-body" > < tt  class = "literal" > < span  class = "pre" > ++m_inc< / span > < / tt > < / td > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Returns:< / th > < td  class = "field-body" > < tt  class = "literal" > < span  class = "pre" > *this< / span > < / tt > < / td > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p > < tt  class = "literal" > < span  class = "pre" > counting_iterator& < / span >  < span  class = "pre" > operator--();< / span > < / tt > < / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Effects:< / th > < td  class = "field-body" > < tt  class = "literal" > < span  class = "pre" > --m_inc< / span > < / tt > < / td > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Returns:< / th > < td  class = "field-body" > < tt  class = "literal" > < span  class = "pre" > *this< / span > < / tt > < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-18 20:54:59 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > < tt  class = "literal" > < span  class = "pre" > Incrementable< / span >  < span  class = "pre" > const& < / span >  < span  class = "pre" > base()< / span >  < span  class = "pre" > const;< / span > < / tt > < / p > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< table  class = "field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:53:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Returns:< / th > < td  class = "field-body" > < tt  class = "literal" > < span  class = "pre" > m_inc< / span > < / tt > < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< pre  class = "literal-block" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								template < class Incrementable> 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 01:30:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								counting_iterator< Incrementable>  make_counting_iterator(Incrementable x);
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / pre > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Returns:< / th > < td  class = "field-body" > An instance of < tt  class = "literal" > < span  class = "pre" > counting_iterator< Incrementable> < / span > < / tt > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								with < tt  class = "literal" > < span  class = "pre" > current< / span > < / tt >  constructed from < tt  class = "literal" > < span  class = "pre" > x< / span > < / tt > .< / td > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "example" > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 16:10:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id6"  name = "example" > Example< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 00:48:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > This example fills an array with numbers and a second array with
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								pointers into the first array, using < tt  class = "literal" > < span  class = "pre" > counting_iterator< / span > < / tt >  for both
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								tasks. Finally < tt  class = "literal" > < span  class = "pre" > indirect_iterator< / span > < / tt >  is used to print out the numbers
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								into the first array via indirection through the second array.< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< pre  class = "literal-block" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								int N = 7;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								std::vector< int>  numbers;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								typedef std::vector< int> ::iterator n_iter;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								std::copy(boost::counting_iterator< int> (0),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         boost::counting_iterator< int> (N),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         std::back_inserter(numbers));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								std::vector< std::vector< int> ::iterator>  pointers;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								std::copy(boost::make_counting_iterator(numbers.begin()),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          boost::make_counting_iterator(numbers.end()),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          std::back_inserter(pointers));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								std::cout < <  " indirectly printing out the numbers from 0 to "  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          < <  N < <  std::endl;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								std::copy(boost::make_indirect_iterator(pointers.begin()),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          boost::make_indirect_iterator(pointers.end()),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          std::ostream_iterator< int> (std::cout, "  " ));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								std::cout < <  std::endl;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / pre > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p > The output is:< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< pre  class = "literal-block" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								indirectly printing out the numbers from 0 to 7
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								0 1 2 3 4 5 6 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / pre > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 16:10:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > The source code for this example can be found < a  class = "reference"  href = "../example/counting_iterator_example.cpp" > here< / a > .< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2003-09-14 02:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-27 04:13:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< hr  class = "footer"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< div  class = "footer" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< a  class = "reference"  href = "counting_iterator.rst" > View document source< / a > .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Generated by < a  class = "reference"  href = "http://docutils.sourceforge.net/" > Docutils< / a >  from < a  class = "reference"  href = "http://docutils.sourceforge.net/rst.html" > reStructuredText< / a >  source.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 19:48:41 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / body > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / html >