<?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[Zeiger Template Methode &#x2F; qsort]]></title><description><![CDATA[<p>Hallo zusammen,<br />
kann mit jemand sagen, wie ich dieses kleine problem gelöst bekomme?</p>
<pre><code class="language-cpp">// Prototyp
	friend int compare_int(const void* a, const void* b);
// ...
</code></pre>
<pre><code class="language-cpp">template &lt;class T&gt; void List&lt;T&gt;::sort(void)
{
	qsort(this-&gt;list, this-&gt;count, sizeof(T), compare);
}

// friend of member
template &lt;class T&gt; int compare(const void* a, const void* b)
{
	return *(T*)a - *(T*)b;
}
</code></pre>
<p>Ich möchte gern Daten mit qsort sortieren und muss der Funktion einen Zeiger auf eine compare Funktion übergeben. Das ganze soll mit einem template gelöst werden, weil ich Daten sortieren möchte unabhängig davon, ob es sich um einen 'int' oder 'double' oder 'char' handelt!</p>
<p>Ist nur ein Ansatz, ich weiß nicht genau, wie ich das lösen kann. <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=":confused:"
      alt="😕"
    /></p>
<p>Danke für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244507/zeiger-template-methode-qsort</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 04:53:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244507.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Jul 2009 09:49:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 09:49:35 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
kann mit jemand sagen, wie ich dieses kleine problem gelöst bekomme?</p>
<pre><code class="language-cpp">// Prototyp
	friend int compare_int(const void* a, const void* b);
// ...
</code></pre>
<pre><code class="language-cpp">template &lt;class T&gt; void List&lt;T&gt;::sort(void)
{
	qsort(this-&gt;list, this-&gt;count, sizeof(T), compare);
}

// friend of member
template &lt;class T&gt; int compare(const void* a, const void* b)
{
	return *(T*)a - *(T*)b;
}
</code></pre>
<p>Ich möchte gern Daten mit qsort sortieren und muss der Funktion einen Zeiger auf eine compare Funktion übergeben. Das ganze soll mit einem template gelöst werden, weil ich Daten sortieren möchte unabhängig davon, ob es sich um einen 'int' oder 'double' oder 'char' handelt!</p>
<p>Ist nur ein Ansatz, ich weiß nicht genau, wie ich das lösen kann. <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=":confused:"
      alt="😕"
    /></p>
<p>Danke für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735428</guid><dc:creator><![CDATA[Kronos_m]]></dc:creator><pubDate>Wed, 01 Jul 2009 09:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 09:58:18 GMT]]></title><description><![CDATA[<p>qsort() geht davon aus, dass die Daten sequentiell im Speicher liegen. Bist Du sicher, dass Deine List-Klasse das leistet? Warum verwendest Du nicht std::list und deren Memberfunktion sort()?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735438</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Wed, 01 Jul 2009 09:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 09:58:59 GMT]]></title><description><![CDATA[<p>schau mal im Tutorial deiner Wahl nach Komparatoren/Funktoren. Dann kannst du dem qsort z.B. ein std::less&lt;T&gt; übergeben. natürlich muss es dafür entsprechend angepasst werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735439</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 01 Jul 2009 09:58:59 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 09:59:45 GMT]]></title><description><![CDATA[<p>jencas schrieb:</p>
<blockquote>
<p>Bist Du sicher, dass Deine List-Klasse das leistet? Warum verwendest Du nicht std::list und deren Memberfunktion sort()?</p>
</blockquote>
<p>ist er.. er nennt seine vector-Klasse List, um die Leute hier im Forum zu verwirren und sich an C# zu orientieren <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1735441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735441</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 01 Jul 2009 09:59:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 10:13:39 GMT]]></title><description><![CDATA[<p>Perfekt erkannt <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>Danke für die Hilfe, ich werde mal nach Komparatoren/Funktoren suchen. Mal sehen was dabei rumkommt! Melde mich bestimmt wieder <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1735458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735458</guid><dc:creator><![CDATA[Kronos_m]]></dc:creator><pubDate>Wed, 01 Jul 2009 10:13:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 10:14:47 GMT]]></title><description><![CDATA[<p>Kronos_m, hast du schon von <code>std::sort()</code> gehört? Das wird in C++ eigentlich benutzt, da kannst du dir auch das <code>void*</code> -Rumgefrickel sparen. Und wenn du sowieso schon Templates verwendest...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735459</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 01 Jul 2009 10:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 10:49:47 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>ist er.. er nennt seine vector-Klasse List, um die Leute hier im Forum zu verwirren und sich an C# zu orientieren <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>
</blockquote>
<p>omg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735488</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Wed, 01 Jul 2009 10:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 11:06:13 GMT]]></title><description><![CDATA[<p>Kurzes instruktives Beispiel: <a href="http://codepad.org/vNbu2I4F" rel="nofollow">http://codepad.org/vNbu2I4F</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735500</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Wed, 01 Jul 2009 11:06:13 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 15:50:56 GMT]]></title><description><![CDATA[<p>Kronos_m schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;class T&gt; void List&lt;T&gt;::sort(void)
{
	qsort(this-&gt;list, this-&gt;count, sizeof(T), compare);
}
</code></pre>
</blockquote>
<p>Wieder einmal drückst Du einer C-Funktion etwas auf, was sie gar nicht leisten kann. <code>qsort</code> tauscht zwei Elemente, indem es einfach die rohen Bytes im Speicher vertauscht. Das ganze geht nur so lange gut, bis Dein <code>T</code> mal ein nicht-POD ist, welches so ein Gefrickel auf Byte-Ebene nicht verkraftet.</p>
<p>Es gibt auch nicht-PODs, die soetwas verkraften (also &quot;trivial vertauschbar&quot; sind). Aber verlassen kannst Du dich darauf nicht.</p>
<p>Ich hoffe, das Wort &quot;Gefrickel&quot; kommt auch so negativ beladen an, wie ich's gemeint 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>Kronos_m schrieb:</p>
<blockquote>
<p>Ich möchte gern Daten mit qsort sortieren und muss der Funktion einen Zeiger auf eine compare Funktion übergeben. Das ganze soll mit einem template gelöst werden, weil ich Daten sortieren möchte unabhängig davon, ob es sich um einen 'int' oder 'double' oder 'char' handelt!</p>
</blockquote>
<p>Wie schon erwähnt: Nimm einfach <code>std::sort</code> aus dem <code>&lt;algorithm&gt;</code> Header. Das ist typsicher, scheller und weiß auch ohne explizite Angabe einer Vergleichsfunktion, was zu tun ist, sofern der Typ mit dem &lt; Operator vergleichbar ist.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735637</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 01 Jul 2009 15:50:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 16:11:01 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wie schon erwähnt: Nimm einfach <code>std::sort</code> aus dem <code>&lt;algorithm&gt;</code> Header. Das ist typsicher, scheller und weiß auch ohne explizite Angabe einer Vergleichsfunktion, was zu tun ist, sofern der Typ mit dem &lt; Operator vergleichbar ist.</p>
</blockquote>
<p>Wieso ist std::sort schneller?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735642</guid><dc:creator><![CDATA[C++Fan 2009]]></dc:creator><pubDate>Wed, 01 Jul 2009 16:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 16:25:44 GMT]]></title><description><![CDATA[<p>C++Fan 2009 schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wie schon erwähnt: Nimm einfach <code>std::sort</code> aus dem <code>&lt;algorithm&gt;</code> Header. Das ist typsicher, scheller und weiß auch ohne explizite Angabe einer Vergleichsfunktion, was zu tun ist, sofern der Typ mit dem &lt; Operator vergleichbar ist.</p>
</blockquote>
<p>Wieso ist std::sort schneller?</p>
</blockquote>
<p>inlining</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735649</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 01 Jul 2009 16:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 16:32:59 GMT]]></title><description><![CDATA[<p>C++Fan 2009 schrieb:</p>
<blockquote>
<p>Wieso ist std::sort schneller?</p>
</blockquote>
<p>Der Vergleich zwischen <code>std::sort&lt;&gt;</code> und <code>qsort</code> ist eines der Paradebeispiele, bei denen C++ besser wegkommt.</p>
<p><code>std::sort&lt;&gt;</code> ist ein Funktions-Template und der Compiler kann eine spezielle Sortierfunktion generieren, in der die Vergleichsfunktion schon direkt eingebaut ist. Das ist dann der Fall, wenn als Sortierfunktion ein Funktor benutzt wird, dessen operator()-Funktion als <em>inline</em>-Funktion deklariert wurde.</p>
<p>Das Äquivalent in C wäre eine eigens für die bestimmte Typ/Vergleichsfunktion-Kombination handgeschriebene Sortierfunktion. Da keiner jedesmal eine neue Sortierfunktion schreiben will, benutzt <code>qsort</code> stattdessen einen Typ-agnostischen Funktionszeiger für die Vergleichsfunktion. Nachteile: Es ist Typ-unsicher (void*), langsamer (so ein Funktionsaufruf auch ein bischen Zeit) und nicht für non-<a href="http://en.wikipedia.org/wiki/Plain_Old_Data_Structures" rel="nofollow">POD</a>s geeignet.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735652</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 01 Jul 2009 16:32:59 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 19:01:51 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wieder einmal drückst Du einer C-Funktion etwas auf, was sie gar nicht leisten kann. <code>qsort</code> tauscht zwei Elemente, indem es einfach die rohen Bytes im Speicher vertauscht. Das ganze geht nur so lange gut, bis Dein <code>T</code> mal ein nicht-POD ist, welches so ein Gefrickel auf Byte-Ebene nicht verkraftet.</p>
</blockquote>
<p>Ich habe mit qsort auch schon stuct arrays und der weiteren sortiert, so schlimm kann das also nicht sein! Man muss lediglich die compare Funktion für einen solchen Fall anpassen.</p>
<p>Außerdem wollte ich auch nur PODs (erstmal) sortieren.</p>
<p>Ich weiß das man(n) das Rad nicht immer neu erfinden muss, wenn es doch schon da ist. Aber auch nur Übung macht den Meister. ^^ Also muss man manchmal eigene Wege gehen um etwas dazu zu lernen, was ich hier gerade versuche <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="😃"
    /> Danke für eure Tatkräftige Hilfe dabei <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735717</guid><dc:creator><![CDATA[Kronos_m]]></dc:creator><pubDate>Wed, 01 Jul 2009 19:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 19:07:44 GMT]]></title><description><![CDATA[<p>Kronos_m schrieb:</p>
<blockquote>
<p>Ich habe mit qsort auch schon stuct arrays und der weiteren sortiert, so schlimm kann das also nicht sein! Man muss lediglich die compare Funktion für einen solchen Fall anpassen.</p>
</blockquote>
<p>&quot;So schlimm kann das nicht sein&quot; ist eine sehr weise Behauptung, noch dazu, da du bisher nur mit PODs hantiert hast. In modernem C++ sind aber POD-Structs und Arrays eher die Ausnahme, Klassen sind da angesagt. Entsprechend versagt dein <code>qsort()</code> .</p>
<p>Wenn du den Leuten hier nicht glaubst, dass du einen unnötig schweren Weg auf dich nimmst und später garantiert Probleme damit haben wirst, ist das deine Sache. Schliesslich musst du ja wissen, wie du programmierst, wir können dir nur einen Rat geben. Aber du lernst durch <code>qsort()</code> nicht einmal viel, eher beginnst du, dir die C-Sichtweise anzueignen und <code>void*</code> zu verharmlosen. Wie auch immer, wir haben dich gewarnt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735722</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 01 Jul 2009 19:07:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 19:12:09 GMT]]></title><description><![CDATA[<p>Jetzt hast du mich aber falsch verstanden <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>Freue mich über die Hilfe. Und ich beschäftige mich auch mit den Tipps, z.B. std::sort()!</p>
<p>Eigentlich wollte ich ja auch nur zahlen und strings sortieren. Wie kann ich denn Objekte sortieren? Wie wird denn festgelegt welches &quot;größer&quot; als das andere ist?<br />
Kann ich jede beliebiges Objekt als Parameter an</p>
<pre><code>std::sort()
</code></pre>
<p>übergeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735724</guid><dc:creator><![CDATA[Kronos_m]]></dc:creator><pubDate>Wed, 01 Jul 2009 19:12:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 19:28:46 GMT]]></title><description><![CDATA[<p>Kronos_m schrieb:</p>
<blockquote>
<p>Eigentlich wollte ich ja auch nur zahlen und strings sortieren.</p>
</blockquote>
<p>Mit &quot;strings&quot; geht's ja schon los. Meinst Du std::string? Das ist übrigens eine nicht-POD-Klasse.</p>
<p>Kronos_m schrieb:</p>
<blockquote>
<p>Wie kann ich denn Objekte sortieren? Wie wird denn festgelegt welches &quot;größer&quot; als das andere ist?</p>
</blockquote>
<p>Du hast wohl noch nicht auf jencas' Link (siehe Seite 1 dieses Threads) geklickt.</p>
<p>Kronos_m schrieb:</p>
<blockquote>
<p>Kann ich jede beliebiges Objekt als Parameter an</p>
<pre><code>std::sort()
</code></pre>
<p>übergeben?</p>
</blockquote>
<p>Siehe Dokumentation for <a href="http://www.cplusplus.com/reference/algorithm/sort/" rel="nofollow">std::sort</a>. Du kannst std::sort ziemlich viel geben. Das muss nicht mal 'nen Array sein.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735731</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 01 Jul 2009 19:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 19:45:25 GMT]]></title><description><![CDATA[<p>Habe mich zu std::sort() mal schlau gemacht. Ist es &quot;egal&quot;, ob ich einen Iterator oder einen Pointer übergebe?</p>
<p>Ja, ich meinte std::string! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":-O"
      alt="😮"
    /></p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Kronos_m schrieb:</p>
<p>Wie kann ich denn Objekte sortieren? Wie wird denn festgelegt welches &quot;größer&quot; als das andere ist?</p>
<p>Du hast wohl noch nicht auf jencas' Link (siehe Seite 1 dieses Threads) geklickt.</p>
</blockquote>
<p>Doch sicher, hab ich gemacht <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="🙂"
    /> Das kann ich ja so mit qsort auch realisieren. Kann ich denn</p>
<pre><code>std::sort(vp.begin(), vp.end(), myFunction())
</code></pre>
<p>auch template methoden als dritten Parameter übergeben?</p>
<p>So, dann bin ich auch soweit durch und kann dann fast schon durchstarten ohne euch noch die letzten Nerven kosten zu müssen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735738</guid><dc:creator><![CDATA[Kronos_m]]></dc:creator><pubDate>Wed, 01 Jul 2009 19:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 21:06:50 GMT]]></title><description><![CDATA[<p>Kronos_m schrieb:</p>
<blockquote>
<p>Habe mich zu std::sort() mal schlau gemacht. Ist es &quot;egal&quot;, ob ich einen Iterator oder einen Pointer übergebe?</p>
</blockquote>
<p>Iteratoren sind ein Konzept, das das Pointer-Konzept erweitert. Andersrum sind Pointer ein Spezialfall des Iteratorkonzepts. Sollte in jedem halbwegs ordentlichen Einsteigerbuch im Kapitel über Iteratoren drinstehen, dass wo immer ein Template einen Iterator-Typ erwartet, ein Pointer auch tut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735756</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 01 Jul 2009 21:06:50 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 22:00:59 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Iteratoren sind ein Konzept, das das Pointer-Konzept erweitert.</p>
</blockquote>
<p>Die Bedeutung des Begriffs &quot;Konzept&quot; ist ja spätestens seit dem &quot;C++0x concepts proposal&quot; eine ganz besondere im Bereich generischer Programmierung. Hier ist die Rede von Konzepten, Modellen und Typen. Ein Typ T kann Modell eines Konzeptes K sein. Die Parallele zu OOP ist zu erkennen: Ein Objekt O kann Instanz einer Klasse C sein. Die Sache mit den Konzepten wird nicht umsonst als &quot;Typsystem für Typen&quot; beschrieben.</p>
<p>Iterator ist also ein Konzept und ein Typ kann dieses Konzept &quot;modellieren&quot;. Ein Zeiger-Typ ist ein solches Modell. Zeiger-Typen sind sogar recht speziell, da sie auch das &quot;verfeinerte&quot; RandomAccessIterator-Konzept modellieren.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735768</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 01 Jul 2009 22:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 22:01:58 GMT]]></title><description><![CDATA[<p>Kronos_m schrieb:</p>
<blockquote>
<p>Kann ich denn</p>
<pre><code>std::sort(vp.begin(), vp.end(), myFunction())
</code></pre>
<p>auch template methoden als dritten Parameter übergeben?</p>
</blockquote>
<p>Nope.</p>
<p>Wenn du Funktions-Templates meinst (freie Funktionen), dann kannst du per static_cast&lt;Funktionstyp&gt;() einen Funktionszeiger auf eine Spezialisierung des Funktions-Templates bekommen, und diesen Funktionszeiger kannst du dann an std::sort übergeben.</p>
<p>Du kannst aber Funktoren übergeben, wobei der operator () des Funktors durchaus ein Template sein kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735769</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 01 Jul 2009 22:01:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Wed, 01 Jul 2009 23:18:36 GMT]]></title><description><![CDATA[<p>du meinst myFunction&lt;typ&gt; !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735784</guid><dc:creator><![CDATA[moment mal!]]></dc:creator><pubDate>Wed, 01 Jul 2009 23:18:36 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Thu, 02 Jul 2009 04:40:57 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn du Funktions-Templates meinst (freie Funktionen), dann kannst du per static_cast&lt;Funktionstyp&gt;() einen Funktionszeiger auf eine Spezialisierung des Funktions-Templates bekommen, und diesen Funktionszeiger kannst du dann an std::sort übergeben.</p>
</blockquote>
<p>Wieso casten? Ein Zeiger auf eine freie Templatefunktion oder statische Membertemplatefunktion (nicht Funktionstemplate!) ist das gleiche wie ein Zeiger auf eine normale Funktion.</p>
<pre><code class="language-cpp">sort(bla, bla, &amp;myFunction&lt;int&gt;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1735794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735794</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 02 Jul 2009 04:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Thu, 02 Jul 2009 08:54:18 GMT]]></title><description><![CDATA[<p>Kronos_m schrieb:</p>
<blockquote>
<p>Wie kann ich denn Objekte sortieren? Wie wird denn festgelegt welches &quot;größer&quot; als das andere ist?<br />
Kann ich jede beliebiges Objekt als Parameter an</p>
<pre><code>std::sort()
</code></pre>
<p>übergeben?</p>
</blockquote>
<p>Schau Dir nochmal mein Beispiel an, dort gibt es ein Objekt 'Person', welches aber nur nach dem Member 'nachname' sortiert wird. Welches der Objekte &quot;kleiner&quot; ist, legst Du im operator () des Funktors fest (das bei sort anzugebene Prädikat sollte immer Logik für aufsteigende Sortierung haben, deswegen &quot;kleiner&quot;). Da der Funktor von binary_function abgeleitet ist, kannst Du std::not1 voranstellen, um absteigende Sortierung zu erreichen. Vielleicht schaffe ich es zeitlich in der Mittagspause noch ein erweitertes Beispiel zusammenzuzimmern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735869</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Thu, 02 Jul 2009 08:54:18 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Thu, 02 Jul 2009 09:54:53 GMT]]></title><description><![CDATA[<pre><code>#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

using namespace std;

struct Person
{
   Person(string const &amp; v, string const &amp; n, int a) : vorname(v), nachname(n), alter(a) {}
   string vorname;
   string nachname;
   int alter;
};

ostream &amp; operator &lt;&lt; (ostream &amp; os, Person const &amp; p)
{
  os &lt;&lt; p.nachname &lt;&lt; &quot;, &quot; &lt;&lt; p.vorname &lt;&lt; &quot; (&quot; &lt;&lt; p.alter &lt;&lt; ')' &lt;&lt; endl;
  return os;  
}

enum Kriterium
{
  Name,
  Alter
};

struct aufsteigend_nach : public binary_function&lt;Person, Person, bool&gt;
{
  aufsteigend_nach(Kriterium k) : kriterium(k) {}

  inline bool operator () (Person const &amp; p1, Person const &amp; p2) const
  {
    if (kriterium == Alter)
      return p1.alter &lt; p2.alter;

    if (p1.nachname &lt; p2.nachname)
      return true;

    if (p1.nachname == p2.nachname)
      return p1.vorname &lt; p2.vorname;

    return false;
  }

private:
  Kriterium kriterium;
};

int main()
{
  vector&lt;Person&gt; vp;
  vp.push_back(Person(&quot;Klaus&quot;, &quot;Thaler&quot;, 24));
  vp.push_back(Person(&quot;Maria&quot;, &quot;Kron&quot;, 44));
  vp.push_back(Person(&quot;Paul&quot;, &quot;Ahner&quot;, 29));
  vp.push_back(Person(&quot;Hans A.&quot;, &quot;Pils&quot;, 37));
  cout &lt;&lt; &quot;aufsteigend nach Name:&quot; &lt;&lt; endl;
  sort(vp.begin(), vp.end(), aufsteigend_nach(Name));
  copy(vp.begin(), vp.end(), ostream_iterator&lt;Person&gt;(cout));
  cout &lt;&lt; &quot;\nabsteigend nach Alter:&quot; &lt;&lt; endl;
  sort(vp.begin(), vp.end(), not2(aufsteigend_nach(Alter)));
  copy(vp.begin(), vp.end(), ostream_iterator&lt;Person&gt;(cout)); 
}
</code></pre>
<p>Output:</p>
<pre><code>aufsteigend nach Name:
Ahner, Paul (29)
Kron, Maria (44)
Pils, Hans A. (37)
Thaler, Klaus (24)

absteigend nach Alter:
Kron, Maria (44)
Pils, Hans A. (37)
Ahner, Paul (29)
Thaler, Klaus (24)
</code></pre>
<p>Live zu erleben unter: <a href="http://codepad.org/M5SENoRS" rel="nofollow">http://codepad.org/M5SENoRS</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735903</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Thu, 02 Jul 2009 09:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Thu, 02 Jul 2009 11:06:02 GMT]]></title><description><![CDATA[<p>Danke jencas!</p>
<p>Mir fällt auf, dass ich structs bisher föllig unterschätzt habe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /><br />
Habe mir zum Üben das ganze mal in &quot;einfach&quot; gebaut:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;algorithm&gt;

using namespace std;

struct MYSORT {
	template&lt;class T&gt; bool operator() (T a, T b) { return a &lt; b; } 
} mysort;

int main (void)
{
	int iArray[] = {12,315,26,231,3,62,34526,432};
	for (int i = 0; i &lt; 8; i++)
		cout &lt;&lt; iArray[i] &lt;&lt; endl;
	cout &lt;&lt; endl;
	sort(iArray, iArray + 8, mysort);
	for (int i = 0; i &lt; 8; i++)
		cout &lt;&lt; iArray[i] &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>Warum ist es so wichtig, dass ich den '()' Operator überlade?<br />
Ich dachte vorher immer, dass ich in ein struct nur Attribute einbauen kann! Ich vestehe noch nicht ganz, warum die Methode im struct wie aufgerufen wird. Muss der dritte Parameter bei std::sort() nicht ein Zeiger auf eine Funktion sein?</p>
<p>Wäre super, wenn mir jemand verständlich den Ablauf erklären könnte.</p>
<p>Ihr habt mir schon sehr weiter geholfen, danke an alle <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>PS.: Wenn ich das richtig sehe, dann kann ich doch jetzt alle PODs sortieren!?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735952</guid><dc:creator><![CDATA[Kronos_m]]></dc:creator><pubDate>Thu, 02 Jul 2009 11:06:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger Template Methode &#x2F; qsort on Thu, 02 Jul 2009 11:22:41 GMT]]></title><description><![CDATA[<p>Der dritte Parameter von sort muss ein &quot;Callable&quot; sein, also etwas, was man irgendwie aufrufen kann.</p>
<p>Callables können in C++ aber nicht nur Funktionszeiger, sondern auch Funktoren sein. Einen Funktor nennt man ein Objekt einer Klasse, welche den operator() implementiert hat. Dadurch kann man dieses Objekt ohne Methodenangabe aufrufen, wie eine freie Funktion.</p>
<pre><code class="language-cpp">mysort objekt; // erstelle Objekt vom Typ mysort
if ( objekt( a, b ) ) ... // da mysort ein Funktor ist, lässt es sich aufrufen
</code></pre>
<p>Für Dein Beispiel gilt noch, dass Du sort nicht den Namen der Klasse, sondern ein Objekt der Klasse übergeben muss.</p>
<pre><code class="language-cpp">sort( ..., ..., mysort() );
// oder:

mysort objekt;
sort( ..., ..., objekt );
</code></pre>
<p>PS: structs dürfen dasselbe enthalten wie class. Genaugenommen sind struct und class bis auf die Default-Sichtbarkeit und -Vererbung identisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735961</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 02 Jul 2009 11:22:41 GMT</pubDate></item></channel></rss>