<?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[Vector bleibt Leer]]></title><description><![CDATA[<pre><code class="language-cpp">bool CleanDuplicates( vector &lt; wstring &gt; * Strings ){
	// returns -&gt; Strings altered ? Y / N
	// Usage : v32 = ~crc32_calc (msg, len, ~0U);
	struct STRING_INFO{
		explicit STRING_INFO( DWORD C, unsigned int SP ){
			CRC = C;
			StringPos = SP;
		}
		DWORD CRC;
		unsigned int StringPos;	
	};

	bool RetVal = false;
	vector &lt; STRING_INFO * &gt; * CRC = new vector &lt; STRING_INFO * &gt;( Strings-&gt;size() );

	for ( unsigned int i = 0; i &lt; Strings-&gt;size(); i++ ){
		CRC-&gt;push_back( new STRING_INFO( ~crc32_calc( reinterpret_cast &lt; const BYTE * &gt;( (*Strings)[i].c_str() ), (*Strings)[i].size(), ~0U ), i ) );
	}

	for ( vector &lt; STRING_INFO * &gt;::iterator It = CRC-&gt;begin(); It &lt; CRC-&gt;end(); It++ ){
		for ( vector &lt; STRING_INFO * &gt;::iterator nIt = CRC-&gt;begin(); nIt &lt; CRC-&gt;end(); nIt++ ){
			if ( It == nIt )
				continue;
			if ( (*It)-&gt;CRC == (*nIt)-&gt;CRC ){
				Strings-&gt;erase( Strings-&gt;begin() + (*It)-&gt;StringPos );
				delete *It;
				CRC-&gt;erase(nIt);
				RetVal = true;
			}
		}
	}

	return RetVal;
}
</code></pre>
<p>Hi,</p>
<p>wenn ich diesen code ausführe ( Strings ist mit werten geladen, die CRC methode gibt gute werte zurück. ) bleibt mein CRC vector leer ( alle pointer auf NULL ) - ich compille mit visual studio 2008 - und ich verstehe nicht wirlich wieso...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257966/vector-bleibt-leer</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 15:52:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257966.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jan 2010 10:30:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 10:49:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">bool CleanDuplicates( vector &lt; wstring &gt; * Strings ){
	// returns -&gt; Strings altered ? Y / N
	// Usage : v32 = ~crc32_calc (msg, len, ~0U);
	struct STRING_INFO{
		explicit STRING_INFO( DWORD C, unsigned int SP ){
			CRC = C;
			StringPos = SP;
		}
		DWORD CRC;
		unsigned int StringPos;	
	};

	bool RetVal = false;
	vector &lt; STRING_INFO * &gt; * CRC = new vector &lt; STRING_INFO * &gt;( Strings-&gt;size() );

	for ( unsigned int i = 0; i &lt; Strings-&gt;size(); i++ ){
		CRC-&gt;push_back( new STRING_INFO( ~crc32_calc( reinterpret_cast &lt; const BYTE * &gt;( (*Strings)[i].c_str() ), (*Strings)[i].size(), ~0U ), i ) );
	}

	for ( vector &lt; STRING_INFO * &gt;::iterator It = CRC-&gt;begin(); It &lt; CRC-&gt;end(); It++ ){
		for ( vector &lt; STRING_INFO * &gt;::iterator nIt = CRC-&gt;begin(); nIt &lt; CRC-&gt;end(); nIt++ ){
			if ( It == nIt )
				continue;
			if ( (*It)-&gt;CRC == (*nIt)-&gt;CRC ){
				Strings-&gt;erase( Strings-&gt;begin() + (*It)-&gt;StringPos );
				delete *It;
				CRC-&gt;erase(nIt);
				RetVal = true;
			}
		}
	}

	return RetVal;
}
</code></pre>
<p>Hi,</p>
<p>wenn ich diesen code ausführe ( Strings ist mit werten geladen, die CRC methode gibt gute werte zurück. ) bleibt mein CRC vector leer ( alle pointer auf NULL ) - ich compille mit visual studio 2008 - und ich verstehe nicht wirlich wieso...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832791</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Tue, 05 Jan 2010 10:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 10:32:26 GMT]]></title><description><![CDATA[<p>wieso ist das ~ vor der funktion die was in den vektor pusht?<br />
ist das überhaupt zulässig das zeichen ausser bei destructoren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832793</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 05 Jan 2010 10:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 10:59:28 GMT]]></title><description><![CDATA[<p>dreht alle bits um, hab grad das fachwort für vergessen, die crc methode liefert nen DWORD ( unsigned long ).</p>
<pre><code class="language-cpp">#include &lt;bitset&gt;
#include &lt;iostream&gt;
using namespace std;
int main(int argc, char* argv[])
{
  int N = 0xFF00FF00;
  cout &lt;&lt; bitset &lt; 32 &gt;(N) &lt;&lt; endl;
  cout &lt;&lt; bitset &lt; 32 &gt;(~N) &lt;&lt; endl;

  return 0;
}
</code></pre>
<p>pseudo beispiel code.</p>
<p>edit: bitwise not... ja, so einfach kanns sein. <a href="http://www.informit.com/guides/content.aspx?g=cplusplus&amp;seqNum=163" rel="nofollow">http://www.informit.com/guides/content.aspx?g=cplusplus&amp;seqNum=163</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832795</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Tue, 05 Jan 2010 10:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 12:14:25 GMT]]></title><description><![CDATA[<p>Oh Mein gott :|</p>
<pre><code class="language-cpp">vector &lt; STRING_INFO * &gt; * CRC = new vector &lt; STRING_INFO * &gt;( );
CRC-&gt;reserve ( Size );
</code></pre>
<p>löst das problem, ist da der positions zeiger im vektor verschoben oder wie oO?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832860</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Tue, 05 Jan 2010 12:14:25 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 12:08:17 GMT]]></title><description><![CDATA[<p>Benutz in Zeile 5 doch ne Initialisierungsliste, dann kannste CRC und StringPos const machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832866</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Tue, 05 Jan 2010 12:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 12:09:11 GMT]]></title><description><![CDATA[<p>Schurke schrieb:</p>
<blockquote>
<p>löst das problem, ist da der positions zeiger im vektor verschoben oder wie oO?</p>
</blockquote>
<p>Wenn du vorher schon einen Vektor mit hinreichenden vielen Elementen erzeugst, brauchst du hinterher nicht mehr mit push_back anzuhängen, sondern kannst gleich mit [] auf die Elemente zugreifen. Wenn du aber sowieso später hinten anhängst, reicht ein zu Anfang leerer Vektor.</p>
<p>Ich möchte aber noch anmerken, dass du meiner Meinung nach unnötig viele Zeiger benutzt. Du könntest in diesem Beispielcode komplett auf Zeiger verzichten. Dann wärst du auch das Speicherleck los <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/1832869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832869</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 05 Jan 2010 12:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 12:19:25 GMT]]></title><description><![CDATA[<p>Kóyaánasqatsi schrieb:</p>
<blockquote>
<p>Benutz in Zeile 5 doch ne Initialisierungsliste, dann kannste CRC und StringPos const machen.</p>
</blockquote>
<p>stimmt, werd ich.</p>
<p>MFK schrieb:</p>
<blockquote>
<p>Schurke schrieb:</p>
<blockquote>
<p>löst das problem, ist da der positions zeiger im vektor verschoben oder wie oO?</p>
</blockquote>
<p>Wenn du vorher schon einen Vektor mit hinreichenden vielen Elementen erzeugst, brauchst du hinterher nicht mehr mit push_back anzuhängen, sondern kannst gleich mit [] auf die Elemente zugreifen. Wenn du aber sowieso später hinten anhängst, reicht ein zu Anfang leerer Vektor.</p>
</blockquote>
<p>danke, jetzt machts auch Sinn wieso es nicht geht !...</p>
<p>Aber das mit dem speicherleck, das ist noch da weil ich mich erstmal mit dem einem fehler rumplagen musste <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832875</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Tue, 05 Jan 2010 12:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 12:21:00 GMT]]></title><description><![CDATA[<p>Schurke schrieb:</p>
<blockquote>
<p>dreht alle bits um, hab grad das fachwort für vergessen</p>
</blockquote>
<p>Komplement? <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/1832877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832877</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Tue, 05 Jan 2010 12:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 12:57:17 GMT]]></title><description><![CDATA[<p>Geh mitm Debugger durch und schau was an den Stellen passiert wo er eigentlich den Vetor befüllen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832900</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 05 Jan 2010 12:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 14:25:58 GMT]]></title><description><![CDATA[<p>Du hast auch noch ein ganz anderes Problem. Wenn du ein Element löschst, verschieben sich ja alle restlichen in &quot;String&quot;. Dann stimmen deine &quot;StringPos&quot; in den STRING_INFOs (je nach Position) nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832964</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 05 Jan 2010 14:25:58 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 15:03:32 GMT]]></title><description><![CDATA[<p>Stimmt, darauf sitze ich gerade, würde ich aber gerne versuchen erst selbst zu lösen <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/1832971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832971</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Tue, 05 Jan 2010 15:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 16:02:41 GMT]]></title><description><![CDATA[<p>Ohne dir jetzt nahetreten zu wollen, aber das ist Code für daily WTF. Es geht wesentlich einfacher, wenn du eine map verwendest.<br />
Bei der Lösung mit der Map fügst du jeden String mit seinem CRC Wert als Key ein, und danach kopierst du den Value aller Tupel zurück in den Ergebnisvector. Vorher merkst du dir noch die Länge des Eingabevektors, wenn Ergebnis- und Eingabevektor unterschiedliche Längen haben wurde der Ergebnisvektor verändert.</p>
<pre><code class="language-cpp">bool RemoveDuplicates( vector&lt;wstring&gt;&amp; data )
{
   map&lt;DWORD,wstring&gt; tmp;
   for( vector&lt;wstring&gt;::const_iterator it = Data.begin(); it != Data.end(); ++it )
   {
      DWORD CRC = calc_crc( *it );
      tmp[CRC] = *it;
   }
   vector&lt;wstring&gt; unique;
   Unique.reserve( tmp.size() );
   for( map&lt;DWORD,wstring&gt;::const_iterator it = tmp.begin(); it != tmp.end(); ++it )
   {
      unique.push_back( it-&gt;second );
   }
   if( unique.size() != data.size() )
   {
      data = unique;
      return true;
   }
   return false;
}
</code></pre>
<p>PS:<br />
Es ginge ebenfalls mit deiner STRING_INFO Struktur, dann musst du deinen Vektor nach den CRC Werten sortieren (eigener Funktor/Funktion), und anschliessend alle Duplikate mit std::unique und std::vector::erase aus dem Vektor löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833053</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 05 Jan 2010 16:02:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vector bleibt Leer on Tue, 05 Jan 2010 16:13:00 GMT]]></title><description><![CDATA[<p>xDD danke, das sieht wirklich leichter aus, das wäre meine lösung gewesen, bin gerade fertig geworden.</p>
<pre><code class="language-cpp">//------------------------------------------------------
//-----------------Slightly edited find-----------------

// TEMPLATE FUNCTION find
template&lt;class _InIt, class _Ty&gt;
inline
	_InIt _Find_P(_InIt _First, _InIt _Last, const _Ty&amp; _Val)
	{	// find first matching _Val
	//_DEBUG_RANGE(_First, _Last);
	for (; _First != _Last; ++_First)
		if (*(*_First) == *_Val)// only line changed ^.^
			break;
	return (_First);
	}

template&lt;class _InIt, class _Ty&gt;
inline
	_InIt find_p(_InIt _First, _InIt _Last, const _Ty&amp; _Val)
	{	// find first matching _Val
	_ASSIGN_FROM_BASE(_First, _Find_P(_CHECKED_BASE(_First), _CHECKED_BASE(_Last), _Val));// ah and the _P
	return (_First);
}

//------------------------------------------------------
//------------------------------------------------------

bool CleanDuplicates( vector &lt; wstring &gt; * Strings ){
	// returns -&gt; Strings altered ? Y / N
	// Usage : v32 = ~crc32_calc (msg, len, ~0U);
	struct STRING_INFO{
		explicit STRING_INFO( DWORD C, unsigned int SP ):StringPos(SP),CRC(C){
			// crc's are correct.
			//cout &lt;&lt; hex &lt;&lt; C &lt;&lt; endl;
		}

		bool operator == ( STRING_INFO const&amp; R )
    {
      return (this-&gt;CRC == R.CRC);
    }

		const DWORD CRC;
		const unsigned int StringPos;
	};

	bool RetVal = false;
	vector &lt; STRING_INFO * &gt; * CRC = new vector &lt; STRING_INFO * &gt;( Strings-&gt;size() );

	for ( unsigned int i = 0; i &lt; Strings-&gt;size(); i++ )
		(*CRC)[i] = new STRING_INFO( ~crc32_calc( reinterpret_cast &lt; const BYTE * &gt;( (*Strings)[i].c_str() ), (*Strings)[i].size(), ~0U ), i );

	for ( vector &lt; STRING_INFO * &gt;::iterator It = CRC-&gt;begin(); It &lt; CRC-&gt;end(); It++ ){
		vector &lt; STRING_INFO * &gt;::iterator Beg = CRC-&gt;begin();
		vector &lt; STRING_INFO * &gt;::iterator Pos;
		for ( ;; ){
			Pos = find_p( Beg, CRC-&gt;end(), *It );
			if ( Pos == CRC-&gt;end() || Pos == CRC-&gt;end() - 1)
				break;// 2ter loop
			if ( Pos == It ){
				Beg = It + 1;
				continue;// 1ster loop
			}
			RetVal = true;
			// Relocate It
			STRING_INFO * Temp = *It;
			(*Strings)[(*Pos)-&gt;StringPos] = L&quot;&quot;;
			delete *Pos;
			CRC-&gt;erase( Pos );
			Beg = CRC-&gt;begin();
			It = find_p( Beg, CRC-&gt;end(), Temp );
		}
	}

	for ( unsigned int i = 0; i &lt; CRC-&gt;size(); i++ )
		delete (*CRC)[i];

	for ( int i = 0, n = Strings-&gt;size(); i &lt; n; i++ ){
		if ( !(*Strings)[i].compare(L&quot;&quot;) ){
			Strings-&gt;erase( Strings-&gt;begin() + i );
			n = Strings-&gt;size();
			--i;
		}
	}

	return RetVal;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1833068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833068</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Tue, 05 Jan 2010 16:13:00 GMT</pubDate></item></channel></rss>