<?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[iterator von einem Typ zum andere konvertieren?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe folgendes Problem: Zwei Vektoren mit verschiedenen Inhalten, aber Ende des Codes sollten sie gleiche Größe haben:</p>
<pre><code class="language-cpp">std::vector&lt;T1&gt; T1_vector;
std::vector&lt;T2&gt; T2_vector;

// füllen der Vektoren ...

for (std::vector&lt;T1&gt;::const_iterator T1_it = T1_vector.begin(); T1_it != T1_vector.end(); T1_it++) {
   // hier folgt einiger Code
   T2_vector.insert(T1_it, object of T2);
}
</code></pre>
<p>Das funktioniert aber nicht, weil T1_it vom falschen Typ ist. Wie könnte ich denn einen T2-iterator auf die Position von T1_it setzten, so dass ich an der gewünschten Position inserieren kann? Irgendwie stehe ich auf dem Schlauch ...</p>
<p>Danke,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272772/iterator-von-einem-typ-zum-andere-konvertieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 17:30:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272772.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Aug 2010 17:22:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to iterator von einem Typ zum andere konvertieren? on Tue, 24 Aug 2010 17:22:24 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe folgendes Problem: Zwei Vektoren mit verschiedenen Inhalten, aber Ende des Codes sollten sie gleiche Größe haben:</p>
<pre><code class="language-cpp">std::vector&lt;T1&gt; T1_vector;
std::vector&lt;T2&gt; T2_vector;

// füllen der Vektoren ...

for (std::vector&lt;T1&gt;::const_iterator T1_it = T1_vector.begin(); T1_it != T1_vector.end(); T1_it++) {
   // hier folgt einiger Code
   T2_vector.insert(T1_it, object of T2);
}
</code></pre>
<p>Das funktioniert aber nicht, weil T1_it vom falschen Typ ist. Wie könnte ich denn einen T2-iterator auf die Position von T1_it setzten, so dass ich an der gewünschten Position inserieren kann? Irgendwie stehe ich auf dem Schlauch ...</p>
<p>Danke,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943953</guid><dc:creator><![CDATA[CMB]]></dc:creator><pubDate>Tue, 24 Aug 2010 17:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to iterator von einem Typ zum andere konvertieren? on Tue, 24 Aug 2010 18:24:44 GMT]]></title><description><![CDATA[<p>&gt; aber Ende des Codes sollten sie gleiche Größe haben</p>
<p>ganz einfach:<br />
T1_vector.resize(99);<br />
T2_vector.resize(99);</p>
<p>==&gt; gleiche Größe</p>
<p>Das ist wahrscheinlich nicht das, was Du willst. Beschreibe Dein Problem genauer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943975</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 24 Aug 2010 18:24:44 GMT</pubDate></item><item><title><![CDATA[Reply to iterator von einem Typ zum andere konvertieren? on Tue, 24 Aug 2010 18:50:20 GMT]]></title><description><![CDATA[<p>Ich glaube er will in T2 an der Stelle etwas einfügen (im Sinne von x-te Stelle), an der das durch den Iterator gegebene Element in T1 steht. Also z.B. der Iterator zeigt auf das 5. Element in T1_vector und dann an Stelle 5 etwas in T2_vector einfügen.</p>
<p>Was die Frage aufwirft, warum er dann überhaupt erst Iteratoren nimmt und nicht gleich Zahlen. Ist schließlich nicht verboten die random access Fähigkeiten des vectors zu benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943981</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 24 Aug 2010 18:50:20 GMT</pubDate></item><item><title><![CDATA[Reply to iterator von einem Typ zum andere konvertieren? on Tue, 24 Aug 2010 18:52:18 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>==&gt; gleiche Größe</p>
<p>Das ist wahrscheinlich nicht das, was Du willst. Beschreibe Dein Problem genauer.</p>
</blockquote>
<p>In der Tat, das ist sekundär und war vielleicht verwirrend ...</p>
<p>Was ich erreichen möchte, ist an der Position an der sich T1_it befindet in T2_vector inserieren mit .insert(). Das funktioniert aber nicht (was ich meinte ist das T1 und T2 nicht derselbe Typ sind), da der Compiler einen anderen allocator erwartet. Wie kann ich also einen T2-iterator, wie</p>
<pre><code class="language-cpp">std::vector&lt;T2&gt;::const_iterator T2_it;
</code></pre>
<p>auf die Position von T1_it zeigen lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943983</guid><dc:creator><![CDATA[CMB]]></dc:creator><pubDate>Tue, 24 Aug 2010 18:52:18 GMT</pubDate></item><item><title><![CDATA[Reply to iterator von einem Typ zum andere konvertieren? on Tue, 24 Aug 2010 18:58:18 GMT]]></title><description><![CDATA[<p>Da ein Vektor Random-Access-Iteratoren hat, kannst du</p>
<pre><code class="language-cpp">T2_vector.begin() + std::distance(T1_vector.begin(), T1_it)
</code></pre>
<p>benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943985</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 24 Aug 2010 18:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to iterator von einem Typ zum andere konvertieren? on Tue, 24 Aug 2010 19:02:49 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Was die Frage aufwirft, warum er dann überhaupt erst Iteratoren nimmt und nicht gleich Zahlen. Ist schließlich nicht verboten die random access Fähigkeiten des vectors zu benutzen.</p>
</blockquote>
<p>Weil vector.insert einen Iterator verlangt und ich genau diese Funktion brauche - allerdings ist der letzte Punkt wesentlich: Wie dumm von mir, es ginge ja:</p>
<pre><code class="language-cpp">T2_vector.insert(T2_vector.begin() + x, ...)
</code></pre>
<p>wobei x der gewünschte offset ist! Arrgh ... erwähnte ich schon gerade auf dem Schlauch zu stehen? *rotwerd*</p>
<p>Danke!<br />
Christian</p>
<p>edit: bzw. seldon's Lösung, die durch das Explizite punktet!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943988</guid><dc:creator><![CDATA[CMB]]></dc:creator><pubDate>Tue, 24 Aug 2010 19:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to iterator von einem Typ zum andere konvertieren? on Tue, 24 Aug 2010 19:10:37 GMT]]></title><description><![CDATA[<p>Wenn ich richtig verstanden habe, was Du willst, kannst Du dir die ganze Schleife sparen und diesen einen Aufruf tätigen:</p>
<pre><code class="language-cpp">T2vec.insert(T2vec.begin(),T1vec.begin(),T1vec.end());
</code></pre>
<p>Dazu muss aber T1 implizit nach T2 konvertierbar sein.</p>
<p>Wenn Du die in T2 befindlichen Elemente nicht vor Dir herschieben willst, würde es auch mit vector&lt;&gt;::assign(iterator_range) gehen.</p>
<p>Einzelne Elemente per insert einem Vektor hinzufügen ist typischerweise sehr langsam, es sei denn, du fügst immer am Ende ein. Das Einfügen in einem Rutsch sollte in den meisten Fällen viel schneller sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943990</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 24 Aug 2010 19:10:37 GMT</pubDate></item></channel></rss>