<?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[Bestimmter Wert schon im vector enthalten?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann man irgendwie prüfen, ob ein bestimmter Wert schon in einem vector enthalten ist oder muss ich mir das selbst schreiben?</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179305/bestimmter-wert-schon-im-vector-enthalten</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 11:28:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179305.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Apr 2007 10:03:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 10:03:03 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann man irgendwie prüfen, ob ein bestimmter Wert schon in einem vector enthalten ist oder muss ich mir das selbst schreiben?</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269861</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Fri, 20 Apr 2007 10:03:03 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 10:05:45 GMT]]></title><description><![CDATA[<p>Nimm einfach find() dafür <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/1269863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269863</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Apr 2007 10:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 10:15:02 GMT]]></title><description><![CDATA[<p>Wenn du öfter solche Abfragen machst, ist ein sort und binary_search angebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269867</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Fri, 20 Apr 2007 10:15:02 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 10:29:11 GMT]]></title><description><![CDATA[<p>Danke erstmal.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: Was muss ich einbinden um find() nutzen zu können?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6710">@Ponto</a>: Hast Du vielleicht noch ein wenig mehr Input für mich?</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269877</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Fri, 20 Apr 2007 10:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 10:34:22 GMT]]></title><description><![CDATA[<p>PACoSys schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6710">@Ponto</a>: Hast Du vielleicht noch ein wenig mehr Input für mich?</p>
</blockquote>
<p>Nicht wirklich. Es hängt vom Anwendungsfall ab. Aber generell geht es so:</p>
<p>Header:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
</code></pre>
<p>Sortieren:</p>
<pre><code class="language-cpp">std::sort(vec.begin(), vec.end());
</code></pre>
<p>Ist der Wert schon drin?</p>
<pre><code class="language-cpp">if (std::binary_search(vec.begin(), vec.end(), 5)) {
... 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1269880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269880</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Fri, 20 Apr 2007 10:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 10:37:01 GMT]]></title><description><![CDATA[<p>PACoSys schrieb:</p>
<blockquote>
<p>Danke erstmal.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: Was muss ich einbinden um find() nutzen zu können?</p>
</blockquote>
<p>Den Header &lt;algorithm&gt;</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6710">@Ponto</a>: Hast Du vielleicht noch ein wenig mehr Input für mich?</p>
</blockquote>
<p>find() sucht linear, benötigt also (im worst case und im Durchschnitt) eine Laufzeit von O(n). binary_search() verwendet eine binäre Suche und kommt damit auf eine Laufzeit von O(log n) - allerdings erwartet es, daß die Eingabefolge sortiert ist (wenn du die Daten öfter änderst als suchst, lohnt sich das nicht, weil du jedes Mal neu sortieren müsstest).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269882</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Apr 2007 10:37:01 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 12:51:33 GMT]]></title><description><![CDATA[<p>Um heraus zu bekommen, ob ein Wert gefunden wurde, muss ich doch nur mit dem end des vectors vergleichen oder nicht. Komischerweise wird aber kein Eintrag gefunden. In dem vector stehen Pointer auf Point-Objekte und ich habe den == Operator für diese überschrieben (siehe Code). Heißt das im vorliegenden Fall, dass die Koordinaten unterschiedlich sind? Wenn ich sie mir mit cout anzeigen lassen sehe ich nur 4 Nachkommastellen und die sind gleich.</p>
<pre><code class="language-cpp">bool operator == (const Point &amp; crP2) const { return ((x == crP2.GetX()) &amp;&amp; (y == crP2.GetY()) &amp;&amp; (z == crP2.GetZ())); }
</code></pre>
<pre><code class="language-cpp">if (find(rPoints.begin(), rPoints.end(), pPoint) == rPoints.end())
{
	rPoints.push_back(pPoint);
}
</code></pre>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269973</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Fri, 20 Apr 2007 12:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 12:58:14 GMT]]></title><description><![CDATA[<p>Du hast Pointer im vector? Dann werden die auch verglichen und nicht deine Point-Objekte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269975</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 20 Apr 2007 12:58:14 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 12:59:52 GMT]]></title><description><![CDATA[<p>btw. vielleicht solltest du eher ein <a href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/classstd_1_1set.html" rel="nofollow">std::set</a> als ein std::vector benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269977</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 20 Apr 2007 12:59:52 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 13:06:24 GMT]]></title><description><![CDATA[<p>Kann man nicht, falls es pointer sind, eine eigene Vergleichsfunktion schreiben, die eben erst dereferenziert und dann vergleicht und diese dann an find übergeben?</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct PointerVergleich{
    bool operator()(const T*&amp; l,const T*&amp; r){
        return (*l)==(*r);
};
</code></pre>
<p>so in der Art, bin mir aber recht unsicher, ob ich das jetzt richtig geschrieben hab... bitte korrigieren wenn falsch.</p>
<p>EDIT: falls du nie gleichen Elemente im Container haben willst, nimm wie gesagt std::set.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269981</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Fri, 20 Apr 2007 13:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 13:03:25 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Kann man nicht, falls es pointer sind, eine eigene Vergleichsfunktion schreiben, die eben erst dereferenziert und dann vergleicht und diese dann an find übergeben?</p>
</blockquote>
<p>Operatoren die sich ausschließlich auf eingebaute Typen (und nichts anderes sind Pointer) beziehen lassen sich nicht überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269983</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 20 Apr 2007 13:03:25 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 13:08:20 GMT]]></title><description><![CDATA[<p>Siehe oben, ich meinte nicht überladen vom operator==. Würde es wie oben geschrieben nicht gehen? (den Functor dann halt an find übergeben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269989</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Fri, 20 Apr 2007 13:08:20 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 13:30:22 GMT]]></title><description><![CDATA[<p>find() kannst du keinen zusätzlichen Funktor übergeben. Aber die Lösung geht schon in die richtige Richtung - nimm find_if().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270008</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Apr 2007 13:30:22 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 13:31:37 GMT]]></title><description><![CDATA[<p>Der Funktor stand vorhin noch nicht da <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 />
Ja, das sollte gehen.</p>
<p>EDIT: Siehe CStoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270009</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 20 Apr 2007 13:31:37 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Fri, 20 Apr 2007 13:35:39 GMT]]></title><description><![CDATA[<p>Ich weisz, sry, hab den gleich danach hinzugefügt. Aber hier antworten die Leute einfach zu schnell, hehe.</p>
<p>Achja, find_if() war's, sry. Hatte ich mal wieder vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270015</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Fri, 20 Apr 2007 13:35:39 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 08:11:42 GMT]]></title><description><![CDATA[<p>Erstmal danke für Eure zahlreichen Antworten.</p>
<p>Habe es so probiert:</p>
<pre><code class="language-cpp">if (find_if(rPoints.begin(), rPoints.end(), ComparePoint(pPoint)) == rPoints.end())
{
	//create new point
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">class ComparePoint
{
public:
	bool operator () (const Point *&amp; crLhs, const Point *&amp; crRhs)
	{
		return (*crLhs) == (*crRhs);
	}
};
</code></pre>
<p>Ich bekomme jetzt beim Compilieren folgenden Fehler: &quot;'&lt;function-style-cast&gt;': 'Point *' kann nicht in 'ComparePoint' konvertiert werden&quot;.</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272961</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Wed, 25 Apr 2007 08:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 07:57:36 GMT]]></title><description><![CDATA[<p>Ja, Funktoren sind kompliziert <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="😉"
    /> find_if() erwartet eine Funktion/Funktor, die mit einem Parameter aufgerufen werden kann und einen bool zurückgibt - den Vergleich mußt du in deinem op() erledigen:</p>
<pre><code class="language-cpp">struct ComparePoints : public unary_function&lt;Point*,bool&gt;
{
  //Ctor - legt Vergleichwert fest
  ComparePoints(Point* tgt) : m_tgt(tgt) {}

  //op() - vergleicht übergebenen Wert mit Vergleichswert
  bool operator() (Point* akt)
  { return *akt == *m_tgt; }
private:
  Point* m_tgt;
};

...
if (find_if(rPoints.begin(), rPoints.end(), CompairPoint(pPoint)) == rPoints.end())
{
    //create new point
}
</code></pre>
<p>(PS: Zeiger sind klein genug, um sie per Value übergeben zu können - da ist die Übergabe als const-Referenz überflüssig ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272962</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 25 Apr 2007 07:57:36 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 08:41:53 GMT]]></title><description><![CDATA[<p>Danke funktioniert super. Eine Sache noch. Könnt Ihr Euch folgenden Code mal bitte ansehen und mir schreiben, ob Optimierungen möglich sind (ganz bestimmt sind welche möglich). Außerdem habe ich die Vermutung, dass ich da ein Speicherloch programmiert habe. In Kommentaren gibt es noch eine zweite Variante, die funktioniert aber nicht, da man Iteratoren nicht dereferenzieren kann.</p>
<pre><code class="language-cpp">// Create new point.
Point * pPoint = new Point(x, y, z);

// If the point does not exist already then create a new one.
//vector&lt;Point *&gt;::iterator iter = find_if(rPoints.begin(), rPoints.end(), ComparePoint(pPoint)); // version 2
//if (iter == rPoints.end()) // version 2
if (find_if(rPoints.begin(), rPoints.end(), ComparePoint(pPoint)) == rPoints.end()) // version 1
{
	cout &lt;&lt; &quot; not found!!!&quot; &lt;&lt; endl;
	// Point does not exist already.
	pPoint-&gt;SetIndex(rPoints.size());

	rPoints.push_back(pPoint);
}
else
{
	// Delete pPoint because of memory leak??? But it is needed below again!!!
	cout &lt;&lt; &quot; found.&quot; &lt;&lt; endl;
}

// Memorize point index for neighborhoods.
//int index = (*iter)-&gt;GetIndex(); // version 2
int index = (*find_if(rPoints.begin(), rPoints.end(), ComparePoint(pPoint)))-&gt;GetIndex(); // version 1
</code></pre>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272990</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Wed, 25 Apr 2007 08:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 08:49:52 GMT]]></title><description><![CDATA[<p>Die beste Optimierung: Verwende keine Zeiger, wenn es nicht nötig ist (d.h. wenn keine echten Gründe dagegen sprechen, solltest du du einen vector&lt;Point&gt; verwenden - dann erübrigt sich auch die Speicherveraltung und das Gebastel mit dem Functor).</p>
<p>Ansonsten: Ja, im else-Zweig solltest du das per new angelegte Objekt wieder freigeben. Und die Suche solltest du nur einmal durchführen und dir das Ergebnis dann merken (die Lösung &quot;version 2&quot; solltest du auf jeden Fall verwenden - im else-Zweig noch ergänzt um ein <code>iter = rPoints.end()-1;</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272996</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 25 Apr 2007 08:49:52 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 09:45:50 GMT]]></title><description><![CDATA[<p>Variante 2 würde ich ja gerne verwenden, aber Iteratoren können nicht dereferenziert werden.</p>
<p>Ohne Pointer geht es glaube ich nicht. Mal ein Wenig mehr zum Hintergrund: Ich schreibe mir ein Programm, welches aus einer Datei Flächen einliest. Jede Fläche besteht aus Drahtgittern, diese wiederum aus Kanten und die sind dann durch ihre Anfangs- und Endpunkte beschrieben. Beim Einlesen muss ich mir eine Topologie aufbauen, so dass ich hinterher weiß welche Punkte benachbart sind, welche Punkte zu welchem Drahtgitter gehören und welche Punkte zu einer Fläche gehören. Nachdem ich die Daten eingelesen habe, will ich die Punkte so sortieren, dass die Punkte, die den Rand der Fläche beschreiben in einer bestimmten Reihenfolge sind. Nun hatte ich mir folgendes überlegt:</p>
<p>Klasse Face:<br />
- hat einen vector mit allen Punkten =&gt; vector&lt;Point *&gt;<br />
- hat einen vector mit allen Drahtgittern =&gt; vector&lt;Wire *&gt;</p>
<p>Klasse Wire:<br />
- hat einen vector mit den sortierten Indizes der zugehörigen Punkte =&gt; vector&lt;int&gt;</p>
<p>Klasse Point:<br />
- Koordinaten =&gt; double x, double y und double z<br />
- Pointer auf Nachbarn (jeweils zwei) =&gt; Point * pN0 und Point * pN1</p>
<p>Beim Einlesen erstelle ich für jede Fläche eine Instanz der Klasse Face, in dieser wird die Methode processFace() aufgerufen. processFace() erstellt für jedes Drahtgitter der Fläche eine Instanz der Klasse Wire, in der dann wiederum processWire() aufgerufen wird. processWire() ruft für jede Kante des Drahtgitters processEdge() auf. processEdge() ist der Kern, hier werden die Instanzen der Point Klasse erstellt, wobei nur ein neuer Punkt erstellt werden soll, wenn nicht schon ein Punkt mit den selben Koordinaten existiert.</p>
<p>Kann man, dass ohne Pointer umsetzen?</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273042</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Wed, 25 Apr 2007 09:45:50 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 09:49:20 GMT]]></title><description><![CDATA[<p>Ja, kann man ohne Pointer umsetzen. Solange du ohne Polymorphie auskommst. Und das scheint bei deiner Point und Wire Klasse der Fall zu sein. Probier es doch einfach mal ohne Pointer! (du bist in der C++-Welt!) Der Code wird dadurch sogar kürzer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273045</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 25 Apr 2007 09:49:20 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 09:52:17 GMT]]></title><description><![CDATA[<p>PACoSys schrieb:</p>
<blockquote>
<p>Variante 2 würde ich ja gerne verwenden, aber Iteratoren können nicht dereferenziert werden.</p>
</blockquote>
<p>Wer erzählt denn sowas? Klar können Iteratoren dereferenziert werden, andernfalls wären sie ziemlich nutzlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273047</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 25 Apr 2007 09:52:17 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 10:26:55 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wer erzählt denn sowas?</p>
</blockquote>
<p>Die Microsoft Visual C++ Debug Library. Ich kann das Projekt compilieren und ausführen, aber an dem Punkt wo ich den Iterator dereferenziere bekomme ich eine schicke Fehlermeldung:</p>
<p>Debug Assertion Failed!</p>
<p>Program: ...<br />
File: ...<br />
Line: ...</p>
<p>Expression: vector iterator not dereferencable</p>
<p>For information on how your program can cause an assertion<br />
failure, see the Visual C++ documentation on asserts.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a>: Wo speichere ich dann meine Punkte, ich dachte die müsste ich mir mit Pointern merken?! Insbesondere die Nachbarschaft, bisher speichere ich mir einen Pointer, aber aus einem vector&lt;Point&gt; bekomme ich keinen Pointer.</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273051</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Wed, 25 Apr 2007 10:26:55 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 10:35:13 GMT]]></title><description><![CDATA[<p>PACoSys schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Wer erzählt denn sowas?</p>
</blockquote>
<p>Die Microsoft Visual C++ Debug Library. Ich kann das Projekt compilieren und ausführen, aber an dem Punkt wo ich den Iterator dereferenziere bekomme ich eine schicke Fehlermeldung:</p>
<p>Debug Assertion Failed!</p>
<p>Program: ...<br />
File: ...<br />
Line: ...</p>
<p>Expression: vector iterator not dereferencable</p>
</blockquote>
<p>Da hast du vermutlich den falschen Iterator erwischt (sog. singuläre Iteratoren wie end() dürfen nicht dereferenziert werden, aber das mußt du abfangen, bevor du darauf zugreifen willst)</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a>: Wo speichere ich dann meine Punkte, ich dachte die müsste ich mir mit Pointern merken?! Insbesondere die Nachbarschaft, bisher speichere ich mir einen Pointer, aber aus einem vector&lt;Point&gt; bekomme ich keinen Pointer.</p>
</blockquote>
<p>Warum speicherst du nicht die Indizes der Nachbarn im vector&lt;&gt; (und einen Verweis auf das Vater-Element)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273068</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 25 Apr 2007 10:35:13 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 10:36:08 GMT]]></title><description><![CDATA[<p>Zu der Assertion: dann wird der Iterator wohl ungültig sein, sprich Null. Es ist ein Laufzeitfehler und kein Compile-Fehler, oder? Also lässt sich der Iterator prinzipiell dereferenzieren, aber zur Laufzeit schein ein ungültiger Wert drin zu stecken. Wahrscheinlich wird es der end-Iterator sein? Und den sollte man auch nicht dereferenzieren, da er HINTER das letzte Element im Container zeigt.</p>
<p>Zu den vector&lt;Point&gt;: die Points werden als Objekte gespeichert, und nicht als Pointer.</p>
<p>Hier mal ein paar Basics:<br />
<a href="http://www.kharchi.de/cppratgeber1.htm" rel="nofollow">http://www.kharchi.de/cppratgeber1.htm</a><br />
<a href="http://www.kharchi.de/cppratgeber2.htm" rel="nofollow">http://www.kharchi.de/cppratgeber2.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273069</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 25 Apr 2007 10:36:08 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmter Wert schon im vector enthalten? on Wed, 25 Apr 2007 10:43:28 GMT]]></title><description><![CDATA[<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a>: Wo speichere ich dann meine Punkte, ich dachte die müsste ich mir mit Pointern merken?! Insbesondere die Nachbarschaft, bisher speichere ich mir einen Pointer, aber aus einem vector&lt;Point&gt; bekomme ich keinen Pointer.</p>
</blockquote>
<p>Versteh ich nicht. Welche Pointer willst du? Von dem Vector? Oder von dem einzelnen Point? Für beide bekommst du den Pointer oder auch die Referenz, wenn du sie dir holst. Warum denn nicht?</p>
<pre><code class="language-cpp">Point *p1 = &amp;(points.at(1));   // Pointer vom Point-Objekt
</code></pre>
<p>Aber einfach den Index merken, anstatt eines Pointers, wäre auch nicht verkehrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273073</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 25 Apr 2007 10:43:28 GMT</pubDate></item></channel></rss>