<?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[spezialisiertes swap-function wird nicht mehr gefunden]]></title><description><![CDATA[<p>Huhu,</p>
<p>ich habe einen neuen Beitrag aufgemacht, weil ich jetzt ne spezielle frage habe <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="🙂"
    /></p>
<p>und zwar habe ich folgendes:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; class Foo{
    // Konstruktoren, Klassenvariabelen,...
    void swap(Foo&lt;T&gt;&amp; other);
};

template&lt;typename T&gt; void Foo&lt;T&gt;::swap(Foo&lt;T&gt;&amp; other){
    using std:swap;
    // alle variablen tauschen
}
template&lt;typename T&gt; bool operator&lt;(const Foo&lt;T&gt;&amp; lhs, const Foo&lt;T&gt;&amp; rhs){
  // ...
}

template&lt;typename T&gt;void std::swap(Foo&lt;T&gt;&amp; lhs, Foo&lt;T&gt;&amp; rhs)
{ 
  lhs.swap(rhs);
}
</code></pre>
<p>Leider wird das spezialisierte swap nicht benutzt wenn ich sortieren will...<br />
Könnt ihr sehen was ich falsch gemacht habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/259475/spezialisiertes-swap-function-wird-nicht-mehr-gefunden</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 19:43:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/259475.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Jan 2010 16:28:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sat, 23 Jan 2010 16:28:38 GMT]]></title><description><![CDATA[<p>Huhu,</p>
<p>ich habe einen neuen Beitrag aufgemacht, weil ich jetzt ne spezielle frage habe <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="🙂"
    /></p>
<p>und zwar habe ich folgendes:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; class Foo{
    // Konstruktoren, Klassenvariabelen,...
    void swap(Foo&lt;T&gt;&amp; other);
};

template&lt;typename T&gt; void Foo&lt;T&gt;::swap(Foo&lt;T&gt;&amp; other){
    using std:swap;
    // alle variablen tauschen
}
template&lt;typename T&gt; bool operator&lt;(const Foo&lt;T&gt;&amp; lhs, const Foo&lt;T&gt;&amp; rhs){
  // ...
}

template&lt;typename T&gt;void std::swap(Foo&lt;T&gt;&amp; lhs, Foo&lt;T&gt;&amp; rhs)
{ 
  lhs.swap(rhs);
}
</code></pre>
<p>Leider wird das spezialisierte swap nicht benutzt wenn ich sortieren will...<br />
Könnt ihr sehen was ich falsch gemacht habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843783</guid><dc:creator><![CDATA[windschief]]></dc:creator><pubDate>Sat, 23 Jan 2010 16:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sat, 23 Jan 2010 17:03:57 GMT]]></title><description><![CDATA[<p>Woher weißt du das &quot;sort&quot; überhaupt &quot;swap&quot; verwendet, oder wie sortierst du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843794</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sat, 23 Jan 2010 17:03:57 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sat, 23 Jan 2010 17:07:27 GMT]]></title><description><![CDATA[<p>huhu, genau ich benutze container mit Foo's und will diesen sortieren mit</p>
<pre><code class="language-cpp">sort(container.begin(),container.end());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1843796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843796</guid><dc:creator><![CDATA[windschief]]></dc:creator><pubDate>Sat, 23 Jan 2010 17:07:27 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sat, 23 Jan 2010 17:12:22 GMT]]></title><description><![CDATA[<p>Soweit ich weiß ist nicht vorgeschrieben, dass <em>sort</em> zum Vertauschen auch <em>swap</em> verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843798</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sat, 23 Jan 2010 17:12:22 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sat, 23 Jan 2010 18:06:55 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Soweit ich weiß ist nicht vorgeschrieben, dass <em>sort</em> zum Vertauschen auch <em>swap</em> verwendet.</p>
</blockquote>
<p>ja - hab ich auch gerade so verstanden<br />
hier steht bei requirements nur: muss swappable sein und unter swappable verstehen die, dass es entweder swap überladen hat oder copyctor und assignment op überladen hat...</p>
<p>welche implementierung der standard lib hast du denn, die kein swap aufruft? gcc? die ruft glaube iter_swap auf und die wiederrum macht nen dreieckstausch - das hatten wir vor kurzem schon mal - relativ fail xD</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843825</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 23 Jan 2010 18:06:55 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sat, 23 Jan 2010 22:38:44 GMT]]></title><description><![CDATA[<p>hmm okay, aber als du es hier angesprochen hattest <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-258748-and-start-is-30.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-258748-and-start-is-30.html</a><br />
hatte ich es doch ausprobiert und er hat ja swaps gezählt.. jetzt habe ich nur die Klassenvariabeln geändert und jetzt geht er nicht mehr rein..</p>
<p>kann mir jemand den Unterschied erklären?</p>
<p>Veilen Dank <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843902</guid><dc:creator><![CDATA[windschief]]></dc:creator><pubDate>Sat, 23 Jan 2010 22:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sun, 24 Jan 2010 03:13:56 GMT]]></title><description><![CDATA[<p>ich kann es nicht - aber poste mal bitte die implementierung von std::sort und std::iter_swap</p>
<p>bb</p>
<p>edit: mir ist gerad so langweilig, dass ich es direkt mal compiliert und getestet hätte - aber du hast nicht mal was kompilierbares gepostet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f623.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--persevering_face"
      title="&gt;.&lt;"
      alt="😣"
    /> das wäre dann nach dem sort + iter_swap posten das nächste^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843927</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 24 Jan 2010 03:13:56 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sun, 24 Jan 2010 03:14:41 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>welche implementierung der standard lib hast du denn, die kein swap aufruft? gcc? die ruft glaube iter_swap auf und die wiederrum macht nen dreieckstausch - das hatten wir vor kurzem schon mal - relativ fail xD</p>
</blockquote>
<p>genau, ich benutze g++</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>ich kann es nicht - aber poste mal bitte die implementierung von std::sort und std::iter_swap</p>
</blockquote>
<p>hmm? wo kann ich die denn einsehen?<br />
Oder muss ich die auch überladen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843932</guid><dc:creator><![CDATA[windschief]]></dc:creator><pubDate>Sun, 24 Jan 2010 03:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sun, 24 Jan 2010 14:08:59 GMT]]></title><description><![CDATA[<p>windschief schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>welche implementierung der standard lib hast du denn, die kein swap aufruft? gcc? die ruft glaube iter_swap auf und die wiederrum macht nen dreieckstausch - das hatten wir vor kurzem schon mal - relativ fail xD</p>
</blockquote>
<p>genau, ich benutze g++</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>ich kann es nicht - aber poste mal bitte die implementierung von std::sort und std::iter_swap</p>
</blockquote>
<p>hmm? wo kann ich die denn einsehen?<br />
Oder muss ich die auch überladen?</p>
</blockquote>
<p>nein, musst du nicht<br />
du machst nen rechtsklick auf sort und klickst dann auch &quot;go to definition&quot; - dann postest du die sort funktion und die ruft iter_swap auf und da machst du wieder nen rechtsklick drauf und dann &quot;go to definition&quot; und dann postest du noch iter_swap (wobei sich das mit der angabe &quot;ich nutze gcc&quot; eh erledigt hat^^)...<br />
wenn irgendjmd lust hat, könnte er ja vll mal nen ticket schreiben, dass iter_swap dämlich implementiert ist und hoffen, dass beim nächsten gcc-update es dann sinnvoller implementiert ist^^</p>
<p>wenns allerdings nur bei dir funktionieren soll, dann kannst du iterswap einfach mal ändern:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void iter_swap(T &amp;__lhs, T &amp;__rhs)
{
  T __tmp = __lhs;
  *__lhs = *__rhs;
  *__rhs = __tmp;
}
</code></pre>
<p>so in etwa sieht es glaube ich bisher aus</p>
<p>und du änderst es einfach in:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void iter_swap(T &amp;__lhs, T &amp;__rhs)
{
  swap(*__lhs, *__rhs);
}
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1844042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1844042</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 24 Jan 2010 14:08:59 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sun, 24 Jan 2010 14:39:30 GMT]]></title><description><![CDATA[<p>Huhu,<br />
könnte es sein dass folgendes sort verwendet wird?</p>
<pre><code class="language-cpp">template&lt;typename _RandomAccessIterator&gt;
    inline void
    sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef typename iterator_traits&lt;_RandomAccessIterator&gt;::value_type
	_ValueType;

      // concept requirements
      __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept&lt;
	    _RandomAccessIterator&gt;)
      __glibcxx_function_requires(_LessThanComparableConcept&lt;_ValueType&gt;)
      __glibcxx_requires_valid_range(__first, __last);

      if (__first != __last)
	{
	  std::__introsort_loop(__first, __last,
				std::__lg(__last - __first) * 2);
	  std::__final_insertion_sort(__first, __last);
	}
    }
</code></pre>
<p>Was mir noch eingefallen ist... vorher hatte ich ja einen struct als Foo und dann habe ich es in class geändert.. ich weiß es ist (fast) das gleich <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="😉"
    /><br />
aber viell hängt es auch damit zusammen, sonst habe ich eigentlich nichts geändert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1844056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1844056</guid><dc:creator><![CDATA[windschief]]></dc:creator><pubDate>Sun, 24 Jan 2010 14:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sun, 24 Jan 2010 14:40:53 GMT]]></title><description><![CDATA[<p><a href="http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html" rel="nofollow">http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html</a><br />
Ganz interessant um zu verstehen, warum iter_swap nicht immer swap benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1844057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1844057</guid><dc:creator><![CDATA[YASC]]></dc:creator><pubDate>Sun, 24 Jan 2010 14:40:53 GMT</pubDate></item><item><title><![CDATA[Reply to spezialisiertes swap-function wird nicht mehr gefunden on Sun, 24 Jan 2010 17:21:33 GMT]]></title><description><![CDATA[<p>YASC schrieb:</p>
<blockquote>
<p><a href="http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html" rel="nofollow">http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html</a><br />
Ganz interessant um zu verstehen, warum iter_swap nicht immer swap benutzt.</p>
</blockquote>
<p>also sollte man iter_swap auch noch spezialisieren? (bzw verbotenerweise überladen)<br />
es ist ja das einzige argument, dass man vll kein adl haben möchte(wieso auch immer man das nicht wollen sollte) - oder hab ich da zu wenig gelesen und zu viel überflogen? ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1844113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1844113</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 24 Jan 2010 17:21:33 GMT</pubDate></item></channel></rss>