<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://programmingexamples.net/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://programmingexamples.net/w/index.php?action=history&amp;feed=atom&amp;title=CPP%2FCustomIterator</id>
		<title>CPP/CustomIterator - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://programmingexamples.net/w/index.php?action=history&amp;feed=atom&amp;title=CPP%2FCustomIterator"/>
		<link rel="alternate" type="text/html" href="http://programmingexamples.net/w/index.php?title=CPP/CustomIterator&amp;action=history"/>
		<updated>2026-08-05T03:05:10Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.5</generator>

	<entry>
		<id>http://programmingexamples.net/w/index.php?title=CPP/CustomIterator&amp;diff=5134&amp;oldid=prev</id>
		<title>Daviddoria: Created page with 'This example demonstrates what you have to implement to create an STL iterator.  ==CustomIterator.cpp== &lt;source lang=&quot;cpp&quot;&gt; #include &lt;iterator&gt;  template &lt;typename T&gt; struct Poin…'</title>
		<link rel="alternate" type="text/html" href="http://programmingexamples.net/w/index.php?title=CPP/CustomIterator&amp;diff=5134&amp;oldid=prev"/>
				<updated>2012-01-02T16:19:32Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;#039;This example demonstrates what you have to implement to create an STL iterator.  ==CustomIterator.cpp== &amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; #include &amp;lt;iterator&amp;gt;  template &amp;lt;typename T&amp;gt; struct Poin…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This example demonstrates what you have to implement to create an STL iterator.&lt;br /&gt;
&lt;br /&gt;
==CustomIterator.cpp==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iterator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
struct PointedType;&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
struct PointedType&amp;lt;T*&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  typedef T value_type;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename InputIterator&amp;gt;&lt;br /&gt;
struct DerefIterator&lt;br /&gt;
{&lt;br /&gt;
  typedef input_iterator_tag iterator_category;&lt;br /&gt;
  typedef typename PointedType&amp;lt;&lt;br /&gt;
            typename iterator_traits&amp;lt;InputIterator&amp;gt;::value_type&amp;gt;::value_type&lt;br /&gt;
            value_type;&lt;br /&gt;
  typedef typename iterator_traits&amp;lt;InputIterator&amp;gt;::difference_type&lt;br /&gt;
            difference_type;&lt;br /&gt;
  typedef value_type* pointer;&lt;br /&gt;
  typedef value_type&amp;amp; reference;&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
    explicit DerefIterator(const InputIterator&amp;amp; ii)&lt;br /&gt;
      : it(ii) {}&lt;br /&gt;
&lt;br /&gt;
    // Returns the object pointed by the object referenced by it&lt;br /&gt;
    reference operator*()  const { return **it; }&lt;br /&gt;
    pointer   operator-&amp;gt;() const { return *it; }&lt;br /&gt;
&lt;br /&gt;
    DerefIterator&amp;amp; operator++()&lt;br /&gt;
    {&lt;br /&gt;
        ++it;&lt;br /&gt;
        return *this;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    DerefIterator operator++(int)&lt;br /&gt;
    {&lt;br /&gt;
        DerefIterator tmp = *this;&lt;br /&gt;
        ++it;&lt;br /&gt;
        return tmp;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    bool equals(const DerefIterator&amp;lt;InputIterator&amp;gt; &amp;amp; di) const&lt;br /&gt;
    {&lt;br /&gt;
        return di.it == it;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  private:&lt;br /&gt;
    InputIterator it;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Equality functions&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename InputIterator&amp;gt;&lt;br /&gt;
inline bool operator==(const DerefIterator&amp;lt;InputIterator&amp;gt;&amp;amp; di1,&lt;br /&gt;
                       const DerefIterator&amp;lt;InputIterator&amp;gt;&amp;amp; di2)&lt;br /&gt;
{&lt;br /&gt;
  return di1.equals(di2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename InputIterator&amp;gt;&lt;br /&gt;
inline bool operator!=(const DerefIterator&amp;lt;InputIterator&amp;gt;&amp;amp; di1,&lt;br /&gt;
                       const DerefIterator&amp;lt;InputIterator&amp;gt;&amp;amp; di2)&lt;br /&gt;
{&lt;br /&gt;
  return ! (di1 == di2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Helper function&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename InputIterator&amp;gt;&lt;br /&gt;
DerefIterator&amp;lt;InputIterator&amp;gt; deref_iterator(const InputIterator&amp;amp; ii)&lt;br /&gt;
{&lt;br /&gt;
  return DerefIterator&amp;lt;InputIterator&amp;gt;(ii);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  return 0;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CMakeLists.txt==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 2.6)&lt;br /&gt;
&lt;br /&gt;
Project(CustomIterator)&lt;br /&gt;
&lt;br /&gt;
ADD_EXECUTABLE(CustomIterator CustomIterator.cpp)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daviddoria</name></author>	</entry>

	</feed>