<?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[[ERLEDIGT] normaler iterator und const iterator]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich versuche diese Beiden Funktionen möglichst elegant zu verschmelzen:</p>
<p>Die Typedefs:</p>
<pre><code class="language-cpp">typedef std::map&lt;UINT,UTM, std::less&lt;UINT&gt;&gt;::iterator UTM_ITERATOR;
typedef std::map&lt;UINT,UTM, std::less&lt;UINT&gt;&gt;::const_iterator UTM_CONST_ITERATOR;
</code></pre>
<p>Die Suchfunktion liefert die Position der Koordinate:</p>
<pre><code class="language-cpp">inline UTM_CONST_ITERATOR GEOTopology::find_coord_by_id(UINT searched_id) const{

	UTM_CONST_ITERATOR utmconstit = coords.find(searched_id);
	return utmconstit;
}
</code></pre>
<p>Die Löschfunktion soll diese Anhand der gefundenen Position löschen.</p>
<pre><code class="language-cpp">void GEOTopology::del_coord_by_id(UINT useless_id){

	UTM_ITERATOR tmpcoopos = find_coord_by_id(useless_id);
	(coords.end() != tmpcoopos) ? coords.erase(tmpcoopos) : exit(1);

	UINT knotdelret;
	knotdelret = knots.erase(useless_id);
	if(!knotdelret) exit(7);

	del_edges_by_knot_id(useless_id);
}
</code></pre>
<p>Mir ist klar das sich der const int mit dem normalen int nicht vertragen. Gibt es da einen intelligenten Umweg ohne einen Wildsaucode zu produzieren?</p>
<p>PS: bitte nicht über die exits spotten. Wenn der Code funktioniert fliegen sie auch raus <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/topic/268459/erledigt-normaler-iterator-und-const-iterator</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 20:02:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268459.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Jun 2010 13:15:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 16:19:54 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich versuche diese Beiden Funktionen möglichst elegant zu verschmelzen:</p>
<p>Die Typedefs:</p>
<pre><code class="language-cpp">typedef std::map&lt;UINT,UTM, std::less&lt;UINT&gt;&gt;::iterator UTM_ITERATOR;
typedef std::map&lt;UINT,UTM, std::less&lt;UINT&gt;&gt;::const_iterator UTM_CONST_ITERATOR;
</code></pre>
<p>Die Suchfunktion liefert die Position der Koordinate:</p>
<pre><code class="language-cpp">inline UTM_CONST_ITERATOR GEOTopology::find_coord_by_id(UINT searched_id) const{

	UTM_CONST_ITERATOR utmconstit = coords.find(searched_id);
	return utmconstit;
}
</code></pre>
<p>Die Löschfunktion soll diese Anhand der gefundenen Position löschen.</p>
<pre><code class="language-cpp">void GEOTopology::del_coord_by_id(UINT useless_id){

	UTM_ITERATOR tmpcoopos = find_coord_by_id(useless_id);
	(coords.end() != tmpcoopos) ? coords.erase(tmpcoopos) : exit(1);

	UINT knotdelret;
	knotdelret = knots.erase(useless_id);
	if(!knotdelret) exit(7);

	del_edges_by_knot_id(useless_id);
}
</code></pre>
<p>Mir ist klar das sich der const int mit dem normalen int nicht vertragen. Gibt es da einen intelligenten Umweg ohne einen Wildsaucode zu produzieren?</p>
<p>PS: bitte nicht über die exits spotten. Wenn der Code funktioniert fliegen sie auch raus <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/1909471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909471</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 09 Jun 2010 16:19:54 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 13:28:10 GMT]]></title><description><![CDATA[<p>Was hintert Dich denn daran,</p>
<pre><code class="language-cpp">UTM_ITERATOR tmpcoopos = find_coord_by_id(useless_id);
</code></pre>
<p>durch</p>
<pre><code class="language-cpp">UTM_ITERATOR tmpcoopos = coords.find(useless_id);
</code></pre>
<p>in del_coord_by_id zu ersetzten?</p>
<p>Das mit den Bezeichnern würde ich mir auch abgewöhnen. Bezeichner ohne kleine Buchstaben werden typischerweise nur für Makros benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909477</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 09 Jun 2010 13:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 13:30:41 GMT]]></title><description><![CDATA[<p>del_coord_by_id ist nicht const. Du kannst dort also auch eine nicht konstante Version von find_coord_by_id aufrufen, die einen nicht konstanten Iterator zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909484</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Wed, 09 Jun 2010 13:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 13:35:15 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Was hintert Dich denn daran,</p>
<pre><code class="language-cpp">UTM_ITERATOR tmpcoopos = find_coord_by_id(useless_id);
</code></pre>
<p>durch</p>
<pre><code class="language-cpp">UTM_ITERATOR tmpcoopos = coords.find(useless_id);
</code></pre>
<p>in del_coord_by_id zu ersetzten?</p>
</blockquote>
<p>Sollte man nicht wegen der Datenkapselung auf die Daten nur mit get und set Funktionen zugreifen? Oder ist es innerhalb der Klasse ok?</p>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Das mit den Bezeichnern würde ich mir auch abgewöhnen. Bezeichner ohne kleine Buchstaben werden typischerweise nur für Makros benutzt.</p>
</blockquote>
<p>In welcher Art sollte man sie sonst von den üblichen typen hervorheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909487</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 09 Jun 2010 13:35:15 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 13:39:46 GMT]]></title><description><![CDATA[<p>brotbernd schrieb:</p>
<blockquote>
<p>del_coord_by_id ist nicht const. Du kannst dort also auch eine nicht konstante Version von find_coord_by_id aufrufen, die einen nicht konstanten Iterator zurückgibt.</p>
</blockquote>
<p>Dessen war ich mir bewusst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909491</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 09 Jun 2010 13:39:46 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 13:45:56 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Dessen war ich mir bewusst.</p>
</blockquote>
<p>hm, dann hab ich die Frage wohl nicht verstanden.<br />
Es geht dir doch um die Zeile:</p>
<pre><code class="language-cpp">UTM_ITERATOR tmpcoopos = find_coord_by_id(useless_id);
</code></pre>
<p>find_coord_by_id gibt einen const_iterator zurück, den kannst du natürlich nicht einem iterator zuweisen. Also brauchst du eine nicht konstante find_coord_by_id, oder du rufst einfach</p>
<pre><code class="language-cpp">UTM_ITERATOR tmpcoopos = coords.find(useless_id);
</code></pre>
<p>auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909496</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Wed, 09 Jun 2010 13:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 14:32:45 GMT]]></title><description><![CDATA[<p>brotbernd schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Der Code so wie er da steht ist optimierungsbedürftig, deswegen wollte ich fragen wie man so etwas am besten löst.</p>
<p>Soweit es meinem C++ Wissen entspricht, sollte man auf Klassenelemente wie z.b. in diesem Fall:</p>
<pre><code class="language-cpp">class GEOTopology{

	private:
		.....
		std::map&lt;UINT, UTM,  std::less&lt;UINT&gt;&gt; coords;
		std::map&lt;UINT, Knot, std::less&lt;UINT&gt;&gt; knots;
		std::map&lt;UINT, Edge, std::less&lt;UINT&gt;&gt; edges;
		.....

	public:
		.... // get und set methoden
};
</code></pre>
<p>am besten über get und set Methoden zugreifen um mögliche Fehler abzufangen.<br />
Methoden die nichts am Datenbestand verändern sollen als const deklariert werden.</p>
<p>Die Funktion find_.... verändert ja keine Daten also wollte ich sie als const deklarieren und die const iteratoren verwenden.</p>
<p>Dann kann ich aber logischerweise nicht die methode del_... verwenden weil sie keine const ist ...</p>
<p>Ich bin gerade am überlegen ob es nicht besser wäre einfach die Integer Position über die Methode zurückzugeben.. wäre ein fauler Kompromiss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909519</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 09 Jun 2010 14:32:45 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 15:43:24 GMT]]></title><description><![CDATA[<p>Du hast immer noch nicht gesagt, was gegen eine nicht konstante find_coord_by_id(useless_id) spricht. Die muss ja nicht öffentlich sein.<br />
Oder halt einfach das direkte<br />
UTM_ITERATOR tmpcoopos = coords.find(useless_id);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909551</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Wed, 09 Jun 2010 15:43:24 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 15:56:35 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>PS: bitte nicht über die exits spotten. Wenn der Code funktioniert fliegen sie auch raus <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>
</blockquote>
<p>Dafür würde ich eher <code>assert</code> nehmen, dann bist du auch gleich bei der Fehlerstelle.</p>
<p>darkfate schrieb:</p>
<blockquote>
<pre><code class="language-cpp">typedef std::map&lt;UINT,UTM, std::less&lt;UINT&gt;&gt;::iterator UTM_ITERATOR;
</code></pre>
</blockquote>
<p>Das dritte Template-Argument <code>std::less&lt;UINT&gt;</code> ist nicht nötig, da <code>std::less&lt;T&gt;</code> dem Defaultfunktor bei assoziativen STL-Containern entspricht. Zudem solltest du für portablen Code die <code>&gt;&gt;</code> trennen und <code>&gt; &gt;</code> schreiben.</p>
<p>darkfate schrieb:</p>
<blockquote>
<p>Sollte man nicht wegen der Datenkapselung auf die Daten nur mit get und set Funktionen zugreifen? Oder ist es innerhalb der Klasse ok?</p>
</blockquote>
<p>Für die öffentliche Schnittstelle ist das okay, aber innerhalb der Klasse gewinnst du durch die Indirektion über <code>find_coord_by_id</code> nichts. Zumindest solange du nicht planst, plötzlich mit einer speziellen Semantik zu suchen oder so. Ich würde es nicht unnötig kompliziert machen, sondern einfach</p>
<pre><code class="language-cpp">UTM_ITERATOR tmpcoopos = coords.find(useless_id);
</code></pre>
<p>schreiben.</p>
<p>darkfate schrieb:</p>
<blockquote>
<p>In welcher Art sollte man sie sonst von den üblichen typen hervorheben?</p>
</blockquote>
<p>Warum überhaupt hervorheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909566</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 09 Jun 2010 15:56:35 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] normaler iterator und const iterator on Wed, 09 Jun 2010 16:18:55 GMT]]></title><description><![CDATA[<p>brotbernd schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Hast recht, im Prinzip spricht auch nichts dagegen.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Feine Tipps, damit kann ich weitermachen.</p>
<p>Danke an alle Helfenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909594</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 09 Jun 2010 16:18:55 GMT</pubDate></item></channel></rss>