<?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::ptr_vector -&amp;gt; Zeiger austauschen]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Entweder bin ich blind oder dies geht wirklich nicht und ich muss doch einen normalen <code>std::vector</code> nehmen. Mein Problem ist eigentlich ganz einfach, ich möchte das folgende erreichen, allerdings gerne mit <code>boost::ptr_vector</code> :</p>
<pre><code class="language-cpp">std::vector&lt;Object*&gt; vec; // Der Vektor, gefüllt.

std::swap(vec[a], vec[b]); // Einfach die Zeiger tauschen.
</code></pre>
<p><code>boost::ptr_vector</code> gibt mir die ganze Zeit immer nur irgendwelche Referenzen zurück. Ich komme nicht mehr an die Zeiger im Vektor ran, sobald ich sie reingesetzt habe.</p>
<p>Kann mir da einer weiterhelfen? Oder muss ich doch auf den normalen Vektor ausweichen?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223067/boost-ptr_vector-gt-zeiger-austauschen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 04 Oct 2026 06:22:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223067.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Sep 2008 17:19:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Sun, 21 Sep 2008 17:19:07 GMT]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Entweder bin ich blind oder dies geht wirklich nicht und ich muss doch einen normalen <code>std::vector</code> nehmen. Mein Problem ist eigentlich ganz einfach, ich möchte das folgende erreichen, allerdings gerne mit <code>boost::ptr_vector</code> :</p>
<pre><code class="language-cpp">std::vector&lt;Object*&gt; vec; // Der Vektor, gefüllt.

std::swap(vec[a], vec[b]); // Einfach die Zeiger tauschen.
</code></pre>
<p><code>boost::ptr_vector</code> gibt mir die ganze Zeit immer nur irgendwelche Referenzen zurück. Ich komme nicht mehr an die Zeiger im Vektor ran, sobald ich sie reingesetzt habe.</p>
<p>Kann mir da einer weiterhelfen? Oder muss ich doch auf den normalen Vektor ausweichen?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585634</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 21 Sep 2008 17:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Sun, 21 Sep 2008 17:36:28 GMT]]></title><description><![CDATA[<p>Wie wäre es mit boost::ptr_vector::replace, tut genau was du willst, musst allerdings zweimal aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585643</guid><dc:creator><![CDATA[WTF??]]></dc:creator><pubDate>Sun, 21 Sep 2008 17:36:28 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Sun, 21 Sep 2008 18:05:47 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Ich komme nicht mehr an die Zeiger im Vektor ran, sobald ich sie reingesetzt habe.</p>
</blockquote>
<p>Mit dem Adressoperator kommst du auch nicht weiter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585663</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Sep 2008 18:05:47 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Sun, 21 Sep 2008 18:23:04 GMT]]></title><description><![CDATA[<p>WTF?? schrieb:</p>
<blockquote>
<p>Wie wäre es mit boost::ptr_vector::replace, tut genau was du willst, musst allerdings zweimal aufrufen.</p>
</blockquote>
<p>Ah, wusste ich doch, dass ich etwas übersehen habe. Ist zwar nicht ganz perfekt, aber dürfte wohl für meine Zwecke reichen. Danke!</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<p>Ich komme nicht mehr an die Zeiger im Vektor ran, sobald ich sie reingesetzt habe.</p>
</blockquote>
<p>Mit dem Adressoperator kommst du auch nicht weiter?</p>
</blockquote>
<p>So komme ich an den Zeiger, kann ihn aber nicht überschreiben, bzw. durch einen anderen ersetzen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585669</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 21 Sep 2008 18:23:04 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Sun, 21 Sep 2008 18:52:00 GMT]]></title><description><![CDATA[<p>Man kommt doch gar nicht an die internen Zeiger von ptr_vector, man erhält ja nur T&amp;, also kann man maximal die Adresse von T rausfinden, aber nicht von dem Zeiger den ptr_vector auf T hält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585678</guid><dc:creator><![CDATA[Wie denn?]]></dc:creator><pubDate>Sun, 21 Sep 2008 18:52:00 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Sun, 21 Sep 2008 19:26:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;boost/ptr_container/ptr_vector.hpp&gt;

int main()
{
	boost::ptr_vector&lt;int&gt; intVec;

	int* first = new int(10);
	int* second = new int(20);

	std::cout &lt;&lt; &quot;1: &quot; &lt;&lt; first &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;2: &quot; &lt;&lt; second &lt;&lt; std::endl;

	intVec.push_back(second);
	intVec.insert(intVec.begin(), first);

	boost::ptr_vector&lt;int&gt;::iterator iter = intVec.begin();
	boost::ptr_vector&lt;int&gt;::iterator next = iter + 1;

	// Swap ---&gt;
	boost::ptr_vector&lt;int&gt;::auto_type temp = intVec.replace(iter, &amp;*next);
	intVec.replace(next, temp.release()).release();
	// ---&gt;

	std::cout &lt;&lt; &quot;1: &quot; &lt;&lt; &amp;intVec[0] &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;2: &quot; &lt;&lt; &amp;intVec[1] &lt;&lt; std::endl;

	return 0;
}
</code></pre>
<p>Hat jemand noch eine bessere Idee? Irgendwie sieht das unheimlich hässlich aus. Es funktioniert allerdings. Naja, vielleicht nehm ich doch ein <code>std::vector&lt;Object*&gt;</code> oder ein <code>std::vector&lt;boost::shared_ptr&lt;Object*&gt; &gt;</code> , mal schauen. Denke eher ersteres.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585690</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 21 Sep 2008 19:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Sun, 21 Sep 2008 20:36:50 GMT]]></title><description><![CDATA[<p>Wie wäre es mit base?</p>
<pre><code class="language-cpp">...
std::iter_swap(iter.base(),next.base());
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1585716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585716</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 21 Sep 2008 20:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Sun, 21 Sep 2008 20:45:41 GMT]]></title><description><![CDATA[<p>wo genau ist das problem?<br />
nur weil ein swap etwas unschoen aussieht?</p>
<p>naja, schoener gehts so:<br />
swap(*iter.base(), *next.base());</p>
<p>PS:<br />
zu langsam <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
und noch dazu die haesslichere variante.</p>
<p>verdammt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585721</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 21 Sep 2008 20:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Sun, 21 Sep 2008 20:50:25 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Wie wäre es mit base?</p>
<pre><code class="language-cpp">...
std::iter_swap(iter.base(),next.base());
...
</code></pre>
</blockquote>
<p>Perfekt, genau was ich gesucht habe! Vielen Dank!</p>
<p>@Shade Of Mine,<br />
Auch wenn du zu langsam warst, dankeschön <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Und swap ist nicht unschön. Swap ist geil ... einfach nur geil. Nur habe ich es einfach nicht rausgefunden, wie ich genau dies da oben durchführen kann. Diese <code>base()</code> Funktion habe ich nirgends in der Dokumentation gefunden, um ehrlich zu sein, finde ich sie jetzt immer noch nicht und musste im Quellcode von Boost nachschauen, damit ich begriffen habe, was da geschieht.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585723</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 21 Sep 2008 20:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Mon, 22 Sep 2008 16:18:44 GMT]]></title><description><![CDATA[<p><a href="http://www.boost.org/doc/libs/1_36_0/libs/ptr_container/doc/reversible_ptr_container.html" rel="nofollow">Semantik der Iteratoren von Pointer-Containern</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586107</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 22 Sep 2008 16:18:44 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Mon, 22 Sep 2008 16:46:50 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p><a href="http://www.boost.org/doc/libs/1_36_0/libs/ptr_container/doc/reversible_ptr_container.html" rel="nofollow">Semantik der Iteratoren von Pointer-Containern</a></p>
</blockquote>
<p>Da ist aber nichts zu finden, dass die Iteratoren eine <code>base()</code> Methode haben. Nur das der Container eine solche Methode aufweist, welche einen VoidPtrContainer Referenz zurück gibt, welcher bei <code>ptr_vector</code> anscheinend einen <code>std::vector&lt;void*, Allocator&gt;</code> ist.</p>
<p>Allerdings muss ich zugeben, dass ich nicht einmal diese Methode gefunden hatte. Ich komme irgendwie mit dieser Dokumentation nicht zurecht von den pointer_container.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586125</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 22 Sep 2008 16:46:50 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Mon, 22 Sep 2008 16:57:55 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p><a href="http://www.boost.org/doc/libs/1_36_0/libs/ptr_container/doc/reversible_ptr_container.html" rel="nofollow">Semantik der Iteratoren von Pointer-Containern</a></p>
</blockquote>
<p>Da ist aber nichts zu finden, dass die Iteratoren eine <code>base()</code> Methode haben. Nur das der Container eine solche Methode aufweist, welche einen VoidPtrContainer Referenz zurück gibt, welcher bei <code>ptr_vector</code> anscheinend einen <code>std::vector&lt;void*, Allocator&gt;</code> ist.</p>
<p>Allerdings muss ich zugeben, dass ich nicht einmal diese Methode gefunden hatte. Ich komme irgendwie mit dieser Dokumentation nicht zurecht von den pointer_container.</p>
<p>Grüssli</p>
</blockquote>
<p>Die Dokumentation könnte mehr Querverweise gebrauchen, ansonsten finde ich sie recht aufgeräumt (d.h. für eine boost-Dokumentation...); jedenfalls habe ich die base-Geschichte auf Anhieb gefunden. Lies dir einfach noch einmal im Abschnitt &quot;Semantics: typedefs&quot; durch, was dort über iterator gesagt wird.<br />
Trotz der Warnung denke ich, das die vorgeschlagene Methode sinnvoll ist, selbst wenn die Implementation irgendwann dahingehend geändert wird, dass intern Container aus T* statt Containern aus void* benutzt werden, wird sie noch funktionieren - ist aber erst dann typsicher, denn gegenwärtig kannst du auf diese Weise beliebige Zeigertypen vertauschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586131</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 22 Sep 2008 16:57:55 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Mon, 22 Sep 2008 16:57:17 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Allerdings muss ich zugeben, dass ich nicht einmal diese Methode gefunden hatte. Ich komme irgendwie mit dieser Dokumentation nicht zurecht von den pointer_container.</p>
</blockquote>
<p>Die boost Doku ist fast immer Schrott. Man braucht ein gespuer dafuer um durchzublicken.</p>
<p>Ich hab mir zB gedacht: der iterator ist ja nur ein proxy und hat im hintergrund ja einen originalen iterator in den container. ergo muss es ne moeglichkeit geben an den ursprungsiterator ranzukommen.</p>
<p>also iterator deklariert und . geschrieben und mein intellisense gefragt was es so denkt. und es dachte base(). also mal sehen was base tut und tada - fertig.</p>
<p>aber bei komplexeren sachen kann man sich schon echt zum krueppel suchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586135</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 22 Sep 2008 16:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_vector -&amp;gt; Zeiger austauschen on Mon, 22 Sep 2008 17:02:22 GMT]]></title><description><![CDATA[<p>*Brille abnimmt und im Licht betrachtet* ... hmm vielleicht liegst daran <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Muss die Stelle sicher 5 Mal überlesen haben.</p>
<blockquote>
<p>Note that:</p>
<pre><code>iterator i = ...;
i.base();
</code></pre>
<p>returns an iterator that allows one to iterate over void* elements (this is very rarely needed and you should not use the functionality unless you know what you are doing).</p>
</blockquote>
<p>Ich verzieh mich jetzt aus diesem Thread aus Schande <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>@Shade Of Mine,<br />
Mein IntelliSense ist grad am streiken. Wieder so eine Sache mit der Byte-Gewerkschaft <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586136</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 22 Sep 2008 17:02:22 GMT</pubDate></item></channel></rss>