<?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[memory probleme: vector &amp;amp; set]]></title><description><![CDATA[<p>hi! ich habe folgendes testprogramm gemacht, da ich eventuell ähnliches wo anders benötigte. der sinn dieses programmes wird vielleicht nicht so schnell ersichtlich sein, wo wir mal drüberhinweg sehn ....</p>
<p>ich hab mir folgendes überlegt: ich möchte die vorteile von einem vector und die vorteile einer set verbinden und habe deshalb die set so geabaut, dass es ein point element erhält!</p>
<p>jedenfalls bekomm ich nach 52 durchläufen einen speicherfehler und ich weiß nicht wieso??</p>
<p>hier mein code:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;set&gt;

using namespace std;

struct vergleich
{
	bool operator() (const string *s1, const string *s2) const {return *s1 &gt; *s2;}
	bool operator() (const string &amp;s1, const string &amp;s2) const {return s1 &gt; s2;}
};

int main(void)
{
	printf(&quot;hello\n&quot;);

	string str;
	vector&lt;string&gt; vec;
	vector&lt;string&gt;::iterator it;

	set&lt;string *, vergleich&gt; dataset;
	set&lt;string *, vergleich&gt;::iterator datait;

	str.clear();
	for(int i=0; i&lt;100; i++)
	{
		str += &quot;0&quot;;
		vec.push_back(str);
		it = vec.begin() + (vec.size()-1);
		// datait = dataset.insert(&amp;(*it)).first;
		datait = dataset.insert(it._Myptr).first;
	}
	return 0;
}
</code></pre>
<p>danke für eure hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/135803/memory-probleme-vector-amp-set</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 03:27:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/135803.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 05 Feb 2006 10:00:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to memory probleme: vector &amp;amp; set on Sun, 05 Feb 2006 10:00:07 GMT]]></title><description><![CDATA[<p>hi! ich habe folgendes testprogramm gemacht, da ich eventuell ähnliches wo anders benötigte. der sinn dieses programmes wird vielleicht nicht so schnell ersichtlich sein, wo wir mal drüberhinweg sehn ....</p>
<p>ich hab mir folgendes überlegt: ich möchte die vorteile von einem vector und die vorteile einer set verbinden und habe deshalb die set so geabaut, dass es ein point element erhält!</p>
<p>jedenfalls bekomm ich nach 52 durchläufen einen speicherfehler und ich weiß nicht wieso??</p>
<p>hier mein code:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;set&gt;

using namespace std;

struct vergleich
{
	bool operator() (const string *s1, const string *s2) const {return *s1 &gt; *s2;}
	bool operator() (const string &amp;s1, const string &amp;s2) const {return s1 &gt; s2;}
};

int main(void)
{
	printf(&quot;hello\n&quot;);

	string str;
	vector&lt;string&gt; vec;
	vector&lt;string&gt;::iterator it;

	set&lt;string *, vergleich&gt; dataset;
	set&lt;string *, vergleich&gt;::iterator datait;

	str.clear();
	for(int i=0; i&lt;100; i++)
	{
		str += &quot;0&quot;;
		vec.push_back(str);
		it = vec.begin() + (vec.size()-1);
		// datait = dataset.insert(&amp;(*it)).first;
		datait = dataset.insert(it._Myptr).first;
	}
	return 0;
}
</code></pre>
<p>danke für eure hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986248</guid><dc:creator><![CDATA[kitkat]]></dc:creator><pubDate>Sun, 05 Feb 2006 10:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to memory probleme: vector &amp;amp; set on Sun, 05 Feb 2006 10:50:41 GMT]]></title><description><![CDATA[<p>Erst einmal dein code compiliert überhaupt nicht.<br />
Wenn ich dich richtig verstehe willst du in den vector nur dann einfügen wenn du den string noch nicht eingefügt hast.<br />
Dein Hauptfehler ist dass du in das set pointer auf elemente im vector einfügen willst.<br />
Wenn der Vector aber vergrössert werden muss werden die Pointer auf seine Elemente aber ungültig -&gt; boom.<br />
Es bleibt dir also nichts übrig als in set und vector strings einzufügen.<br />
zb. so</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;set&gt;

using namespace std;

struct vergleich
{
    bool operator() (const string &amp;s1, const string &amp;s2) const {return s1 &gt; s2;}
};

int main(void)
{
    printf(&quot;hello\n&quot;);

    string str;
    vector&lt;string&gt; vec;
    set&lt;string, vergleich&gt; dataset;

    str.clear();
    for(int i=0; i&lt;100; i++) {
       if ( i % 2 )  // versuche 2 mal den gleichen string
          str += &quot;0&quot;;
       if ( dataset.insert(str).second ) // wenn noch nicht im set
          vec.push_back(str);
    }
    cout &lt;&lt; vec.size() &lt;&lt; &quot; elemente im vector &quot; &lt;&lt; dataset.size() &lt;&lt; &quot; elemente im set&quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/986276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986276</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sun, 05 Feb 2006 10:50:41 GMT</pubDate></item><item><title><![CDATA[Reply to memory probleme: vector &amp;amp; set on Sun, 05 Feb 2006 14:13:18 GMT]]></title><description><![CDATA[<p>zuerst mal danke für deine antwort!</p>
<blockquote>
<p>Erst einmal dein code compiliert überhaupt nicht.</p>
</blockquote>
<p>hab nochmals den alten code bei mir im vc++ 2005 express eingfügt und hab null errors ... <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>
<pre><code class="language-cpp">Wenn ich dich richtig verstehe willst du in den vector nur dann einfügen wenn du den string noch nicht eingefügt hast.
</code></pre>
<p>ich glaub da hab ich mich nicht deutlich ausgedrückt, sorry.<br />
es ist so, dass ich alle elemente im vector und im set haben will! es ist vorab sichergestellt, dass jedes element nur einmal vorkommt! ich verwende deshalb einen stringpointer, weil dies nur ein vorab test ist und ich dann später statt dem string eine größere klasse verwenden muss und ich wegen performance/speicher gründen das object nicht zweimal im speicher ablegen kann!</p>
<blockquote>
<p>Wenn der Vector aber vergrössert werden muss werden die Pointer auf seine Elemente aber ungültig -&gt; boom.<br />
Es bleibt dir also nichts übrig als in set und vector strings einzufügen.</p>
</blockquote>
<p>bleibt mir echt nichts anderes übrig als ein hoher performance aufwand? <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>
<p>was jedoch interessant ist, diese kombination funktioniert <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>
<pre><code class="language-cpp">vector&lt;string*&gt; vec;
vector&lt;string*&gt;::iterator it;

set&lt;string, vergleich&gt; dataset;
set&lt;string, vergleich&gt;::iterator datait;
</code></pre>
<p>also wenn der vector das pointer element hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986478</guid><dc:creator><![CDATA[KitKat]]></dc:creator><pubDate>Sun, 05 Feb 2006 14:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to memory probleme: vector &amp;amp; set on Sun, 05 Feb 2006 14:29:56 GMT]]></title><description><![CDATA[<p>KitKat schrieb:</p>
<blockquote>
<p>zuerst mal danke für deine antwort!</p>
<blockquote>
<p>Erst einmal dein code compiliert überhaupt nicht.</p>
</blockquote>
<p>hab nochmals den alten code bei mir im vc++ 2005 express eingfügt und hab null errors ... <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>
</blockquote>
<p>du verwendest implementations details deiner STL</p>
<pre><code>it._Myptr
</code></pre>
<p>KitKat schrieb:</p>
<blockquote>
<p>was jedoch interessant ist, diese kombination funktioniert <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>Ist klar. set ist wahrscheinlich als Baumstruktur implementiert. Dann wird sicher weniger bis nie rumkopiert. Verlassen kannst du dich aber wahrscheinlich nicht drauf.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986499</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sun, 05 Feb 2006 14:29:56 GMT</pubDate></item><item><title><![CDATA[Reply to memory probleme: vector &amp;amp; set on Mon, 06 Feb 2006 08:29:11 GMT]]></title><description><![CDATA[<p>Du könntest auch statt Pointern ints in der set speichern (und diese als Index auf deine vector-Elemente nutzen - da hast du zumindest selber die Kontrolle, wann die Werte ungültig werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/987106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/987106</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 06 Feb 2006 08:29:11 GMT</pubDate></item></channel></rss>