2003-07-29 22:25:39 +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"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< meta  name = "generator"  content = "Docutils 0.6: http://docutils.sourceforge.net/"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< title > The Boost.Iterator Library Boost< / title > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< link  rel = "stylesheet"  href = "../../../rst.css"  type = "text/css"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / head > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< body > 
							 
						 
					
						
							
								
									
										
										
										
											2004-07-14 12:33:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "document"  id = "the-boost-iterator-library-logo" > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1  class = "title" > The Boost.Iterator Library < a  class = "reference external"  href = "../../../index.htm" > < img  alt = "Boost"  src = "../../../boost.png"  / > < / a > < / h1 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-09-11 22:08:18 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								<!--  Distributed under the Boost  --> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								<!--  Software License, Version 1.0. (See accompanying  --> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								<!--  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)  --> 
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< hr  class = "docutils"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< table  class = "docutils field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Authors:< / th > < td  class = "field-body" > David Abrahams, Jeremy Siek, Thomas Witt< / td > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Contact:< / th > < td  class = "field-body" > < a  class = "reference external"  href = "mailto:dave@boost-consulting.com" > dave@ boost-consulting.com< / a > , < a  class = "reference external"  href = "mailto:jsiek@osl.iu.edu" > jsiek@ osl.iu.edu< / a > , < a  class = "reference external"  href = "mailto:witt@styleadvisor.com" > witt@ styleadvisor.com< / a > < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > organizations:< / th > < td  class = "field-body" > < a  class = "reference external"  href = "http://www.boost-consulting.com" > Boost Consulting< / a > , Indiana University < a  class = "reference external"  href = "http://www.osl.iu.edu" > Open Systems
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Lab< / a > , < a  class = "reference external"  href = "http://www.styleadvisor.com" > Zephyr Associates, Inc.< / a > < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > date:< / th > < td  class = "field-body" > $Date$< / td > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2004-11-02 14:31:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > copyright:< / th > < td  class = "field-body" > Copyright David Abrahams, Jeremy Siek, Thomas Witt 2003.< / td > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< table  class = "docutils field-list"  frame = "void"  rules = "none" > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-name"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< col  class = "field-body"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 16:36:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr  class = "field" > < th  class = "field-name" > Abstract:< / th > < td  class = "field-body" > The Boost Iterator Library contains two parts. The first
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 16:39:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								is a system of < a  class = "reference external"  href = "http://www.boost.org/more/generic_programming.html#concept" > concepts< / a >  which extend the C++ standard
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								iterator requirements. The second is a framework of
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								components for building iterators based on these
							 
						 
					
						
							
								
									
										
										
										
											2003-08-05 16:36:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								extended concepts and includes several useful iterator
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								adaptors. The extended iterator concepts have been
							 
						 
					
						
							
								
									
										
										
										
											2004-04-29 00:38:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								carefully designed so that old-style iterators
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								can fit in the new concepts and so that new-style
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								iterators will be compatible with old-style algorithms,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								though algorithms may need to be updated if they want to
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								take full advantage of the new-style iterator
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								capabilities.  Several components of this library have
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								been accepted into the C++ standard technical report.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The components of the Boost Iterator Library replace the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								older Boost Iterator Adaptor Library.< / td > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "contents topic"  id = "table-of-contents" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p  class = "topic-title first" > < strong > Table of Contents< / strong > < / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< ul  class = "simple" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference internal"  href = "#new-style-iterators"  id = "id23" > New-Style Iterators< / a > < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference internal"  href = "#iterator-facade-and-adaptor"  id = "id24" > Iterator Facade and Adaptor< / a > < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference internal"  href = "#specialized-adaptors"  id = "id25" > Specialized Adaptors< / a > < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference internal"  href = "#iterator-utilities"  id = "id26" > Iterator Utilities< / a > < ul > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference internal"  href = "#traits"  id = "id27" > Traits< / a > < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference internal"  href = "#testing-and-concept-checking"  id = "id28" > Testing and Concept Checking< / a > < / li > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / ul > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference internal"  href = "#upgrading-from-the-old-boost-iterator-adaptor-library"  id = "id29" > Upgrading from the old Boost Iterator Adaptor Library< / a > < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference internal"  href = "#history"  id = "id30" > History< / a > < / li > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / ul > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< hr  class = "docutils"  / > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "new-style-iterators" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id23" > New-Style Iterators< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< p > The iterator categories defined in C++98 are extremely limiting
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								because they bind together two orthogonal concepts: traversal and
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								element access.  For example, because a random access iterator is
							 
						 
					
						
							
								
									
										
										
										
											2003-09-14 02:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								required to return a reference (and not a proxy) when dereferenced,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								it is impossible to capture the capabilities of
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tt  class = "docutils literal" > < span  class = "pre" > vector< bool> ::iterator< / span > < / tt >  using the C++98 categories.  This is the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								infamous " < tt  class = "docutils literal" > < span  class = "pre" > vector< bool> < / span > < / tt >  is not a container, and its iterators
							 
						 
					
						
							
								
									
										
										
										
											2003-09-14 02:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								aren't random access iterators" , debacle about which Herb Sutter
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								wrote two papers for the standards comittee (< a  class = "reference external"  href = "http://www.gotw.ca/publications/N1185.pdf" > n1185< / a >  and < a  class = "reference external"  href = "http://www.gotw.ca/publications/N1211.pdf" > n1211< / a > ),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								and a < a  class = "reference external"  href = "http://www.gotw.ca/gotw/050.htm" > Guru of the Week< / a > .  New-style iterators go well beyond
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								patching up < tt  class = "docutils literal" > < span  class = "pre" > vector< bool> < / span > < / tt > , though: there are lots of other
							 
						 
					
						
							
								
									
										
										
										
											2003-09-14 02:17:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								iterators already in use which can't be adequately represented by
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								the existing concepts.  For details about the new iterator
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								concepts, see our< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< blockquote > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< a  class = "reference external"  href = "new-iter-concepts.html" > Standard Proposal For New-Style Iterators< / a >  (< a  class = "reference external"  href = "new-iter-concepts.pdf" > PDF< / a > )< / blockquote > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "iterator-facade-and-adaptor" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id24" > Iterator Facade and Adaptor< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > Writing standard-conforming iterators is tricky, but the need comes
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								up often.  In order to ease the implementation of new iterators,
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								the Boost.Iterator library provides the < tt  class = "docutils literal" > < span  class = "pre" > iterator_facade< / span > < / tt >  class template,
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								which implements many useful defaults and compile-time checks
							 
						 
					
						
							
								
									
										
										
										
											2004-01-18 20:54:59 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								designed to help the iterator author ensure that his iterator is
							 
						 
					
						
							
								
									
										
										
										
											2004-01-10 19:00:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								correct.< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p > It is also common to define a new iterator that is similar to some
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								underlying iterator or iterator-like type, but that modifies some
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								aspect of the underlying type's behavior.  For that purpose, the
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								library supplies the < tt  class = "docutils literal" > < span  class = "pre" > iterator_adaptor< / span > < / tt >  class template, which is specially
							 
						 
					
						
							
								
									
										
										
										
											2004-01-10 19:00:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								designed to take advantage of as much of the underlying type's
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								behavior as possible.< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:14:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > The documentation for these two classes can be found at the following
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								web pages:< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< ul  class = "simple" > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "iterator_facade.html" > < tt  class = "docutils literal" > < span  class = "pre" > iterator_facade< / span > < / tt > < / a >  (< a  class = "reference external"  href = "iterator_facade.pdf" > PDF< / a > )< / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "iterator_adaptor.html" > < tt  class = "docutils literal" > < span  class = "pre" > iterator_adaptor< / span > < / tt > < / a >  (< a  class = "reference external"  href = "iterator_adaptor.pdf" > PDF< / a > )< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-12 15:14:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / ul > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > Both < tt  class = "docutils literal" > < span  class = "pre" > iterator_facade< / span > < / tt >  and < tt  class = "docutils literal" > < span  class = "pre" > iterator_adaptor< / span > < / tt >  as well as many of the < a  class = "reference internal"  href = "#specialized-adaptors" > specialized
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								adaptors< / a >  mentioned below have been proposed for standardization,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								and accepted into the first C++ technical report; see our< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< blockquote > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< a  class = "reference external"  href = "facade-and-adaptor.html" > Standard Proposal For Iterator Facade and Adaptor< / a >  (< a  class = "reference external"  href = "facade-and-adaptor.pdf" > PDF< / a > )< / blockquote > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< p > for more details.< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "specialized-adaptors" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id25" > Specialized Adaptors< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< p > The iterator library supplies a useful suite of standard-conforming
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								iterator templates based on the Boost < a  class = "reference internal"  href = "#iterator-facade-and-adaptor" > iterator facade and adaptor< / a > .< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< ul  class = "simple" > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "counting_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > counting_iterator< / span > < / tt > < / a >  (< a  class = "reference external"  href = "counting_iterator.pdf" > PDF< / a > ): an iterator over a sequence of consecutive values.
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								Implements a " lazy sequence" < / li > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "filter_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > filter_iterator< / span > < / tt > < / a >  (< a  class = "reference external"  href = "filter_iterator.pdf" > PDF< / a > ): an iterator over the subset of elements of some
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								sequence which satisfy a given predicate< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "function_input_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > function_input_iterator< / span > < / tt > < / a >  (< a  class = "reference external"  href = "function_input_iterator.pdf" > PDF< / a > ): an input iterator wrapping a generator (nullary
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								function object); each time the iterator is dereferenced, the function object
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								is called to get the value to return.< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "function_output_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > function_output_iterator< / span > < / tt > < / a >  (< a  class = "reference external"  href = "function_output_iterator.pdf" > PDF< / a > ): an output iterator wrapping a unary function
							 
						 
					
						
							
								
									
										
										
										
											2004-02-01 03:58:49 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								object; each time an element is written into the dereferenced
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								iterator, it is passed as a parameter to the function object.< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "indirect_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > indirect_iterator< / span > < / tt > < / a >  (< a  class = "reference external"  href = "indirect_iterator.pdf" > PDF< / a > ): an iterator over the objects < em > pointed-to< / em >  by the
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								elements of some sequence.< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "permutation_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > permutation_iterator< / span > < / tt > < / a >  (< a  class = "reference external"  href = "permutation_iterator.pdf" > PDF< / a > ): an iterator over the elements of some random-access
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								sequence, rearranged according to some sequence of integer indices.< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "reverse_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > reverse_iterator< / span > < / tt > < / a >  (< a  class = "reference external"  href = "reverse_iterator.pdf" > PDF< / a > ): an iterator which traverses the elements of some
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								bidirectional sequence in reverse.  Corrects many of the
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								shortcomings of C++98's < tt  class = "docutils literal" > < span  class = "pre" > std::reverse_iterator< / span > < / tt > .< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "../../utility/shared_container_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > shared_container_iterator< / span > < / tt > < / a > : an iterator over elements of a container whose
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								lifetime is maintained by a < a  class = "reference external"  href = "../../smart_ptr/shared_ptr.htm" > < tt  class = "docutils literal" > < span  class = "pre" > shared_ptr< / span > < / tt > < / a >  stored in the iterator.< / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "transform_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > transform_iterator< / span > < / tt > < / a >  (< a  class = "reference external"  href = "transform_iterator.pdf" > PDF< / a > ): an iterator over elements which are the result of
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								applying some functional transformation to the elements of an
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								underlying sequence.  This component also replaces the old
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tt  class = "docutils literal" > < span  class = "pre" > projection_iterator_adaptor< / span > < / tt > .< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "zip_iterator.html" > < tt  class = "docutils literal" > < span  class = "pre" > zip_iterator< / span > < / tt > < / a >  (< a  class = "reference external"  href = "zip_iterator.pdf" > PDF< / a > ): an iterator over tuples of the elements at corresponding
							 
						 
					
						
							
								
									
										
										
										
											2004-01-19 18:52:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								positions of heterogeneous underlying iterators.< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / ul > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "iterator-utilities" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id26" > Iterator Utilities< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "traits" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h2 > < a  class = "toc-backref"  href = "#id27" > Traits< / a > < / h2 > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< ul  class = "simple" > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "pointee.html" > < tt  class = "docutils literal" > < span  class = "pre" > pointee.hpp< / span > < / tt > < / a >  (< a  class = "reference external"  href = "pointee.pdf" > PDF< / a > ): Provides the capability to deduce the referent types
							 
						 
					
						
							
								
									
										
										
										
											2004-01-13 23:03:18 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								of pointers, smart pointers and iterators in generic code.  Used
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								in < tt  class = "docutils literal" > < span  class = "pre" > indirect_iterator< / span > < / tt > .< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "iterator_traits.html" > < tt  class = "docutils literal" > < span  class = "pre" > iterator_traits.hpp< / span > < / tt > < / a >  (< a  class = "reference external"  href = "iterator_traits.pdf" > PDF< / a > ): Provides < a  class = "reference external"  href = "../../mpl/doc/index.html" > MPL< / a > -compatible metafunctions which
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								retrieve an iterator's traits.  Also corrects for the deficiencies
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								of broken implementations of < tt  class = "docutils literal" > < span  class = "pre" > std::iterator_traits< / span > < / tt > .< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / ul > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								<!--  * |interoperable|_ (PDF__): Provides an MPL_\  - compatible metafunction for
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								testing iterator interoperability -->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								<!--  comment! __ interoperable.pdf  --> 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "testing-and-concept-checking" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h2 > < a  class = "toc-backref"  href = "#id28" > Testing and Concept Checking< / a > < / h2 > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< ul  class = "simple" > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "iterator_concepts.html" > < tt  class = "docutils literal" > < span  class = "pre" > iterator_concepts.hpp< / span > < / tt > < / a >  (< a  class = "reference external"  href = "iterator_concepts.pdf" > PDF< / a > ): Concept checking classes for the new iterator concepts.< / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< li > < a  class = "reference external"  href = "iterator_archetypes.html" > < tt  class = "docutils literal" > < span  class = "pre" > iterator_archetypes.hpp< / span > < / tt > < / a >  (< a  class = "reference external"  href = "iterator_archetypes.pdf" > PDF< / a > ): Concept archetype classes for the new iterators concepts.< / li > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / ul > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "upgrading-from-the-old-boost-iterator-adaptor-library" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id29" > Upgrading from the old Boost Iterator Adaptor Library< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2006-09-11 22:08:18 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p  id = "upgrading" > If you have been using the old Boost Iterator Adaptor library to
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								implement iterators, you probably wrote a < tt  class = "docutils literal" > < span  class = "pre" > Policies< / span > < / tt >  class which
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								captures the core operations of your iterator.  In the new library
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								design, you'll move those same core operations into the body of the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								iterator class itself.  If you were writing a family of iterators,
							 
						 
					
						
							
								
									
										
										
										
											2008-02-10 16:39:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								you probably wrote a < a  class = "reference external"  href = "http://www.boost.org/more/generic_programming.html#type_generator" > type generator< / a >  to build the
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tt  class = "docutils literal" > < span  class = "pre" > iterator_adaptor< / span > < / tt >  specialization you needed; in the new library
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								design you don't need a type generator (though may want to keep it
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								around as a compatibility aid for older code) because, due to the
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use of the Curiously Recurring Template Pattern (CRTP) < a  class = "citation-reference"  href = "#cop95"  id = "id22" > [Cop95]< / a > ,
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								you can now define the iterator class yourself and acquire
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								functionality through inheritance from < tt  class = "docutils literal" > < span  class = "pre" > iterator_facade< / span > < / tt >  or
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tt  class = "docutils literal" > < span  class = "pre" > iterator_adaptor< / span > < / tt > .  As a result, you also get much finer control
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								over how your iterator works: you can add additional constructors,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								or even override the iterator functionality provided by the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								library.< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< p > If you're looking for the old < tt  class = "docutils literal" > < span  class = "pre" > projection_iterator< / span > < / tt >  component,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								its functionality has been merged into < tt  class = "docutils literal" > < span  class = "pre" > transform_iterator< / span > < / tt > : as
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								long as the function object's < tt  class = "docutils literal" > < span  class = "pre" > result_type< / span > < / tt >  (or the < tt  class = "docutils literal" > < span  class = "pre" > Reference< / span > < / tt > 
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								template argument, if explicitly specified) is a true reference
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								type, < tt  class = "docutils literal" > < span  class = "pre" > transform_iterator< / span > < / tt >  will behave like
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tt  class = "docutils literal" > < span  class = "pre" > projection_iterator< / span > < / tt >  used to.< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< div  class = "section"  id = "history" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< h1 > < a  class = "toc-backref"  href = "#id30" > History< / a > < / h1 > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< p > In 2000 Dave Abrahams was writing an iterator for a container of
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								pointers, which would access the pointed-to elements when
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								dereferenced.  Naturally, being a library writer, he decided to
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								generalize the idea and the Boost Iterator Adaptor library was born.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Dave was inspired by some writings of Andrei Alexandrescu and chose a
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								policy based design (though he probably didn't capture Andrei's idea
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								very well - there was only one policy class for all the iterator's
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								orthogonal properties).  Soon Jeremy Siek realized he would need the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								library and they worked together to produce a " Boostified"  version,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								which was reviewed and accepted into the library.  They wrote a paper
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								and made several important revisions of the code.< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< p > Eventually, several shortcomings of the older library began to make
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								the need for a rewrite apparent.  Dave and Jeremy started working
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								at the Santa Cruz C++ committee meeting in 2002, and had quickly
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								generated a working prototype.  At the urging of Mat Marcus, they
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								decided to use the GenVoca/CRTP pattern approach, and moved the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								policies into the iterator class itself.  Thomas Witt expressed
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								interest and became the voice of strict compile-time checking for
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								the project, adding uses of the SFINAE technique to eliminate false
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								converting constructors and operators from the overload set.  He
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								also recognized the need for a separate < tt  class = "docutils literal" > < span  class = "pre" > iterator_facade< / span > < / tt > , and
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								factored it out of < tt  class = "docutils literal" > < span  class = "pre" > iterator_adaptor< / span > < / tt > .  Finally, after a
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								near-complete rewrite of the prototype, they came up with the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								library you see today.< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< table  class = "docutils citation"  frame = "void"  id = "cop95"  rules = "none" > 
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< colgroup > < col  class = "label"  / > < col  / > < / colgroup > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< tbody  valign = "top" > 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-29 21:17:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< tr > < td  class = "label" > < a  class = "fn-backref"  href = "#id22" > [Cop95]< / a > < / td > < td > [Coplien, 1995] Coplien, J., Curiously Recurring Template
							 
						 
					
						
							
								
									
										
										
										
											2003-11-24 05:02:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Patterns, C++ Report, February 1995, pp. 24-27.< / td > < / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / table > 
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								<!--  LocalWords:  Abrahams Siek Witt const bool Sutter's WG int UL LI href Lvalue
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								LocalWords:  ReadableIterator WritableIterator SwappableIterator cv pre iter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								LocalWords:  ConstantLvalueIterator MutableLvalueIterator CopyConstructible TR
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								LocalWords:  ForwardTraversalIterator BidirectionalTraversalIterator lvalue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								LocalWords:  RandomAccessTraversalIterator dereferenceable Incrementable tmp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								LocalWords:  incrementable xxx min prev inplace png oldeqnew AccessTag struct
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								LocalWords:  TraversalTag typename lvalues DWA Hmm JGS -->
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< div  class = "footer" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< hr  class = "footer"  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< a  class = "reference external"  href = "index.rst" > View document source< / a > .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Generated by < a  class = "reference external"  href = "http://docutils.sourceforge.net/" > Docutils< / a >  from < a  class = "reference external"  href = "http://docutils.sourceforge.net/rst.html" > reStructuredText< / a >  source.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2003-07-29 22:25:39 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / body > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / html >