<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[boost iterator adaptor]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>hat jmd. von euch Erfahrungen mit o.g. Bibliothek? Ich habe zwar die Docu gelesen aber Bsp. sind da rar.</p>
<p>Meine Fragen: Kann die Bibl. beliebige Iteratoren wrappen UND das Verhalten des gewrappten annehmen/verändern?</p>
<p>Z.B.</p>
<pre><code>// my_iter&lt;std::vector&lt;int&gt;::iterator&gt; soll ein
// Objekt aus boost::iterator_adaptor sein

std::vector&lt;int&gt; v;

for (my_iter&lt;std::vector&lt;int&gt;::iterator&gt; i=v.begin; i!=v.end(); ++i)
{
    std::cout &lt;&lt; *i &lt;&lt; ' '; // nur Primzahlen werden ausgegeben
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/328680/boost-iterator-adaptor</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 15:42:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328680.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 22 Oct 2014 13:23:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost iterator adaptor on Wed, 22 Oct 2014 13:23:42 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>hat jmd. von euch Erfahrungen mit o.g. Bibliothek? Ich habe zwar die Docu gelesen aber Bsp. sind da rar.</p>
<p>Meine Fragen: Kann die Bibl. beliebige Iteratoren wrappen UND das Verhalten des gewrappten annehmen/verändern?</p>
<p>Z.B.</p>
<pre><code>// my_iter&lt;std::vector&lt;int&gt;::iterator&gt; soll ein
// Objekt aus boost::iterator_adaptor sein

std::vector&lt;int&gt; v;

for (my_iter&lt;std::vector&lt;int&gt;::iterator&gt; i=v.begin; i!=v.end(); ++i)
{
    std::cout &lt;&lt; *i &lt;&lt; ' '; // nur Primzahlen werden ausgegeben
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2423347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2423347</guid><dc:creator><![CDATA[goran]]></dc:creator><pubDate>Wed, 22 Oct 2014 13:23:42 GMT</pubDate></item><item><title><![CDATA[Reply to boost iterator adaptor on Wed, 22 Oct 2014 13:42:11 GMT]]></title><description><![CDATA[<p>Hallo goran,</p>
<p>goran schrieb:</p>
<blockquote>
<p>Meine Fragen: Kann die Bibl. beliebige Iteratoren wrappen UND das Verhalten des gewrappten annehmen/verändern?</p>
</blockquote>
<p>ja - das ist möglich.<br />
Für Dein Beispiel unten - nur Elemente mit einer spezifischen Eigenschaft auszugeben - gibt es den filter_iterator, was ein spezialisierter Adapter ist.</p>
<p>Geht z.B. so:</p>
<pre><code>#include &lt;boost/iterator/filter_iterator.hpp&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cmath&gt;

bool is_prime( int x )
{
    if( x &lt; 2 )
        return false;   // no prime is &lt; 2
    int maxi = int(std::sqrt( double( x ) ));
    for( int teiler = 2; teiler &lt;= maxi; ++teiler )
        if( (x % teiler) == 0 )
            return false;
    return true;
}

int main()
{
    using namespace std;
    vector&lt; int &gt; v = { 12, 13, 1, 11, 111 };
    auto from = boost::make_filter_iterator( is_prime, begin( v ), end( v ) );
    auto to = boost::make_filter_iterator( is_prime, end( v ), end( v ) );
    for( auto i = from; i != to; ++i )
        cout &lt;&lt; *i &lt;&lt; ' '; // nur Primzahlen werden ausgegeben
    cout &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>ein weiteres Beispiel mit einem Iterator-Adaptor findest Du <a href="http://www.c-plusplus.net/forum/p2421092#2421092" rel="nofollow">hier</a> im Forum.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2423352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2423352</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 22 Oct 2014 13:42:11 GMT</pubDate></item><item><title><![CDATA[Reply to boost iterator adaptor on Wed, 22 Oct 2014 14:45:41 GMT]]></title><description><![CDATA[<p>Danke Werner für die profunde Antwort.</p>
<p>Ich habe mit deinen Hinweisen versucht mein Problem zu lösen aber es ist leider etwas komplizierter. Ich übergebe einem Parser ein <code>std::multiset&lt;boost::iterator_range&lt;std::string::iterator&gt; &gt;</code> (leider nicht zu ändern) und bekomme diesen befüllt zurück.</p>
<pre><code>#include &lt;string&gt;
#include &lt;set&gt;
#include &lt;iostream&gt;
#include &lt;boost/range.hpp&gt;

int main()
{
    std::string s0=&quot;einen&quot;,s1=&quot;schoenen&quot;,s2=&quot;tag&quot;;

    boost::iterator_range&lt;std::string::iterator&gt;
        ir0 = boost::make_iterator_range(s0)
      , ir1 = boost::make_iterator_range(s1)
      , ir2 = boost::make_iterator_range(s2)
    ;

    std::multiset&lt;boost::iterator_range&lt;std::string::iterator&gt; &gt; irs={ir0,ir1,ir2};

    for (auto i: irs) {              // einen    &lt;-&gt; 3 tag
        std::cout &lt;&lt; i &lt;&lt; std::endl; // schoenen &lt;-&gt; 5 einen
    }                                // tag      &lt;-&gt; 8 schoenen
}
</code></pre>
<p>Nun würde ich gerne das die Reihenfolge im std::multiset eine andere wäre. Quasi den operator&lt; ändern. Für dieses Bsp. würde die Länge des Strings ausreichen. Es gibt da sicher bessere Wege der Länge nach zu sortieren aber es ist auch nur ein Bsp.</p>
<p>Hat jmd. einen Tip?<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2423372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2423372</guid><dc:creator><![CDATA[goran]]></dc:creator><pubDate>Wed, 22 Oct 2014 14:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to boost iterator adaptor on Wed, 22 Oct 2014 15:00:08 GMT]]></title><description><![CDATA[<p>Hallo goran,</p>
<p>goran schrieb:</p>
<blockquote>
<p>Nun würde ich gerne das die Reihenfolge im std::multiset eine andere wäre. Quasi den operator&lt; ändern. Für dieses Bsp. würde die Länge des Strings ausreichen. Es gibt da sicher bessere Wege der Länge nach zu sortieren aber es ist auch nur ein Bsp.</p>
</blockquote>
<p>Das ist nicht der Job eines Iterator-Adaptors!<br />
Ein Iterator-Adaptor kann einzelne Elemete ändern oder auch weglassen (Filter-iterator), aber der Charakter der Sequenz bleibt erhalten.</p>
<p>Du kannst aber einen Funktor-Typ 'Compare' in dem Multiset angeben, der Dir den &lt;-Operator definiert.</p>
<pre><code>std::multiset&lt; boost::iterator_range&lt;std::string::iterator&gt;, Compare &gt;
</code></pre>
<p>Falls Du's nicht allein schaffst, so frage noch mal nach - ich melde mich dann heute abend noch mal.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2423374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2423374</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 22 Oct 2014 15:00:08 GMT</pubDate></item></channel></rss>