<?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[Methode member - Problem mit Klammern&#x2F;else]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Wollte mal fragen ob hier vielleicht wer drüber schauen kann, sitze shcon ne halbe ewigkeit nur an diesem Teil vom Porgramm und komme einfach nicht weiter. haben ein Problem mit den Klammern bzw mit einem else kann es aber leider nicht finden! <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>wäre euch echt sehr dankbar.</p>
<p>[code]template &lt;typename E&gt;<br />
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const {</p>
<p>size_t key;<br />
size_t pos;</p>
<p>key = hashValue&lt;E&gt;(e);</p>
<p>pos = key % nmax;</p>
<p>if(status[pos] == filled){</p>
<p>if (values[pos] == e) return true;</p>
<p>else{</p>
<p>size_t seckey;<br />
size_t newpos;</p>
<p>seckey = 4*((hashValue&lt;E&gt;(e))%10);</p>
<p>newpos = (pos + seckey) % nmax;</p>
<p>while (newpos != pos){</p>
<p>if (status[newpos] == empty) return false;</p>
<p>else{</p>
<p>if(status[newpos] == filled){</p>
<p>if (values[newpos] == e) return true;</p>
<p>}<br />
else newpos = (newpos + seckey) % nmax;<br />
}<br />
}<br />
return false;<br />
}<br />
}</p>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303612/methode-member-problem-mit-klammern-else</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 07:23:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303612.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 May 2012 12:32:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 12:32:40 GMT]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Wollte mal fragen ob hier vielleicht wer drüber schauen kann, sitze shcon ne halbe ewigkeit nur an diesem Teil vom Porgramm und komme einfach nicht weiter. haben ein Problem mit den Klammern bzw mit einem else kann es aber leider nicht finden! <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>wäre euch echt sehr dankbar.</p>
<p>[code]template &lt;typename E&gt;<br />
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const {</p>
<p>size_t key;<br />
size_t pos;</p>
<p>key = hashValue&lt;E&gt;(e);</p>
<p>pos = key % nmax;</p>
<p>if(status[pos] == filled){</p>
<p>if (values[pos] == e) return true;</p>
<p>else{</p>
<p>size_t seckey;<br />
size_t newpos;</p>
<p>seckey = 4*((hashValue&lt;E&gt;(e))%10);</p>
<p>newpos = (pos + seckey) % nmax;</p>
<p>while (newpos != pos){</p>
<p>if (status[newpos] == empty) return false;</p>
<p>else{</p>
<p>if(status[newpos] == filled){</p>
<p>if (values[newpos] == e) return true;</p>
<p>}<br />
else newpos = (newpos + seckey) % nmax;<br />
}<br />
}<br />
return false;<br />
}<br />
}</p>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212797</guid><dc:creator><![CDATA[pepschi]]></dc:creator><pubDate>Fri, 18 May 2012 12:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 12:45:13 GMT]]></title><description><![CDATA[<p>Bitte C/C++ Tags verwenden!</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const {

size_t key;
size_t pos;

key = hashValue&lt;E&gt;(e);

pos = key % nmax;

if(status[pos] == filled){

if (values[pos] == e) return true;

else{

size_t seckey;
size_t newpos;

seckey = 4*((hashValue&lt;E&gt;(e))%10);

newpos = (pos + seckey) % nmax;

while (newpos != pos){

if (status[newpos] == empty) return false;

else{

if(status[newpos] == filled){

if (values[newpos] == e) return true;

}
else newpos = (newpos + seckey) % nmax;
}
}
return false;
}
}

}
</code></pre>
<p>Kompiliert es nicht oder stimmt was beim Ausführen nicht? Wenn es nicht kompiliert, welchen Error erhälst du und auf welcher Zeile?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212799</guid><dc:creator><![CDATA[Ich bin Matrix...]]></dc:creator><pubDate>Fri, 18 May 2012 12:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 12:40:49 GMT]]></title><description><![CDATA[<p>es kompiliert ohen Probleme , mein professor hat mir gesagt das ich heir ein problem mit einem else habe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212802</guid><dc:creator><![CDATA[pepschi]]></dc:creator><pubDate>Fri, 18 May 2012 12:40:49 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 12:48:39 GMT]]></title><description><![CDATA[<p>Hier mal der Code mit Tags und korrekt eingerueckt, sonst kann das keiner lesen (ich hoffe zumindest, dass ich die Einrueckung richtig hibekommen abe):</p>
<pre><code class="language-cpp">template &lt;typename E&gt; 
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{ 

	size_t key; 
	size_t pos; 

	key = hashValue&lt;E&gt;(e); 
	pos = key % nmax; 

	if(status[pos] == filled)
	{ 
		if (values[pos] == e)
			return true; 
		else
		{ 
			size_t seckey; 
			size_t newpos; 

			seckey = 4*((hashValue&lt;E&gt;(e))%10); 

			newpos = (pos + seckey) % nmax; 

			while (newpos != pos)
			{
				if (status[newpos] == empty)
					return false; 
				else
				{ 
					if(status[newpos] == filled)
						if (values[newpos] == e)
							return true; 
					else
						newpos = (newpos + seckey) % nmax; 
				} 
			} 

			return false; 
		} 
	} 
}
</code></pre>
<p>Hat er auch gesagt mit welchem else es ein Problem gibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212804</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 18 May 2012 12:48:39 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 12:53:44 GMT]]></title><description><![CDATA[<p>danke ich hab das eigentlich e alles eingerückt gehabt nur hat das die seite nicht übernommen! sry dafür!</p>
<p>ne hat er mir nicht gesagt und ich bin echt schon am verzweifeln!</p>
<p>die ganze methode soll einen wert suchen der in meiner hashing tabelle ist oder auch nicht ist! info am rande habe bei der add methode double hashing genommen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212809</guid><dc:creator><![CDATA[pepschi]]></dc:creator><pubDate>Fri, 18 May 2012 12:53:44 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 12:57:44 GMT]]></title><description><![CDATA[<p>Ja, du kannst einige deiner else's weglassen.<br />
Wenn du in einer If-Anweisung ein return hast, was definitiv ausgeführt wird, brauchst du das auf das If folgende else nicht, denn der Code im entsprechenden Else Block wird doch nach ende des if's sowieso nicht ausgeführt, du bist ja schon mit return aus der Funktion raus.</p>
<p>Also lässt sich folgendes:</p>
<pre><code class="language-cpp">bool func(bool foo)
{
    if (foo)
        return true;
    else
        return false;
}
</code></pre>
<p>zu:</p>
<pre><code class="language-cpp">bool func(bool foo)
{
    if (foo)
        return true;

    return false;
}
</code></pre>
<p>kürzen.</p>
<p>Das nächste wäre noch, dass du, wenn if(status[pos] == filled) false zurückgibt du nichts returnst.</p>
<p>So, hab den auf die schnelle mal ein wenig gekürzt. Ich hoff ich hab nichts ausversehn rausgelöscht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f636.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_without_mouth"
      title=":X"
      alt="😶"
    /></p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const {

    size_t key;
    size_t pos;

    key = hashValue&lt;E&gt;(e);

    pos = key % nmax;

    if(status[pos] == filled)
    {
        if (values[pos] == e) return true;

        size_t seckey;
        size_t newpos;

        seckey = 4*((hashValue&lt;E&gt;(e))%10);

        newpos = (pos + seckey) % nmax;

        while (newpos != pos)
        {
            if (status[newpos] == empty) return false;

            if(status[newpos] == filled)
            {
                if (values[newpos] == e) return true;
            }
            else newpos = (newpos + seckey) % nmax;
        }

        return false;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2212810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212810</guid><dc:creator><![CDATA[Ich bin Matrix...]]></dc:creator><pubDate>Fri, 18 May 2012 12:57:44 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 13:15:56 GMT]]></title><description><![CDATA[<p>ok funkt doch nicht bekomme diese fehlermeldung</p>
<p>DoubleHashing.h: In member function ‘bool DoubleHashing&lt;E&gt;::member(const E&amp;) const [with E = TestKey]’:<br />
DoubleHashing.h:230: warning: control reaches end of non-void function</p>
<p>Methode member( key )<br />
Ergebnis (erwartet) false<br />
Ergebnis true<br />
Container-Inhalt (erwartet) (empty)<br />
Container::print() HashTable[ n=0 nmax=50000 values= ]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212815</guid><dc:creator><![CDATA[pepschi]]></dc:creator><pubDate>Fri, 18 May 2012 13:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 13:30:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename E&gt; 
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const 
{ 

    size_t key; 
    size_t pos; 

    key = hashValue&lt;E&gt;(e); 
    pos = key % nmax; 

    if(status[pos] == filled) 
    { 
        if (values[pos] == e) 
            return true; 
        else 
        { 
            size_t seckey; 
            size_t newpos; 

            seckey = 4*((hashValue&lt;E&gt;(e))%10); 

            newpos = (pos + seckey) % nmax; 

            while (newpos != pos) 
            { 
                if (status[newpos] == empty) 
                    return false; 
                else 
                { 
                    if(status[newpos] == filled) 
                        if (values[newpos] == e) 
                            return true; 
                    else 
                        newpos = (newpos + seckey) % nmax; 
                } 
            } 
        } 
    } 
    return false; // return hier ?
}
</code></pre>
<p>Das wäre das einzige was mir grad einfällt.. Aber da ich keine Ahnung habe was das Programm macht kann ich Logikfehler echt nicht gut beheben..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212824</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Fri, 18 May 2012 13:30:55 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 13:28:17 GMT]]></title><description><![CDATA[<p>Ihr Container sollte mit simpletest (in der Lernplattform verfügbares Testprogramm) compiliert und ausgiebig getestet worden sein. Das Einfügen und Finden von 100000 Objekten und die Verarbeitung von Objekten vom Typ Person (siehe Unterlagen) sollte kein Problem sein. Andernfalls ist ein Hochladen kaum erfolgversprechend.</p>
<p>Unsere Professoren haben uns einen Container bereitgestellt und wir solln jz die Methoden add und member implementieren.</p>
<p>ich habe doublehashing gewählt.</p>
<p>meine add methode funktioniert soweit wie gesagt nur ein problem mit member!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212826</guid><dc:creator><![CDATA[pepschi]]></dc:creator><pubDate>Fri, 18 May 2012 13:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 14:36:51 GMT]]></title><description><![CDATA[<p>Ich bin Matrix... schrieb:</p>
<blockquote>
<p>Also lässt sich folgendes:</p>
<pre><code class="language-cpp">bool func(bool foo)
{
    if (foo)
        return true;
    else
        return false;
}
</code></pre>
<p>zu:</p>
<pre><code class="language-cpp">bool func(bool foo)
{
    if (foo)
        return true;

    return false;
}
</code></pre>
</blockquote>
<p>ja, das noch weiter zu kürzen scheint mir auch unmöglich... <code>return foo;</code> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2212841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212841</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 18 May 2012 14:36:51 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Fri, 18 May 2012 15:46:58 GMT]]></title><description><![CDATA[<blockquote>
<p>ja, das noch weiter zu kürzen scheint mir auch unmöglich...</p>
</blockquote>
<p>Es ging mir nicht um die Funktionsweise der Funktion - sie ist total sinnlos - es ging mir rein ums Prinzip bzw. der Möglichkeit des Weglassens eines <code>else</code> . Inwieweit diese Funktion sich nochmehr vereinfachen lässt bzw. überhaupt einen Sinn hat ist für dieses Ziel nicht relevant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212875</guid><dc:creator><![CDATA[Ich bin Matrix...]]></dc:creator><pubDate>Fri, 18 May 2012 15:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Sat, 19 May 2012 06:33:10 GMT]]></title><description><![CDATA[<p>DarkShadow44 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;typename E&gt; 
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const 
{ 

    size_t key; 
    size_t pos; 

    key = hashValue&lt;E&gt;(e); 
    pos = key % nmax; 

    if(status[pos] == filled) 
    { 
        if (values[pos] == e) 
            return true; 
        else 
        { 
            size_t seckey; 
            size_t newpos; 

            seckey = 4*((hashValue&lt;E&gt;(e))%10); 

            newpos = (pos + seckey) % nmax; 

            while (newpos != pos) 
            { 
                if (status[newpos] == empty) 
                    return false; 
                else 
                { 
                    if(status[newpos] == filled) 
                        if (values[newpos] == e) 
                            return true; 
                    else 
                        newpos = (newpos + seckey) % nmax; 
                } 
            } 
        } 
    } 
    return false; // return hier ?
}
</code></pre>
<p>Das wäre das einzige was mir grad einfällt.. Aber da ich keine Ahnung habe was das Programm macht kann ich Logikfehler echt nicht gut beheben..</p>
</blockquote>
<p>Ich schreibe den Code mal um. Ganz ohne auf den Inhalt zu achten.</p>
<p>Erstmal Auto-Einrücker benutzen.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{

    size_t key;
    size_t pos;

    key = hashValue&lt;E&gt;(e);
    pos = key % nmax;

    if(status[pos] == filled)
    {
        if (values[pos] == e)
            return true;
        else
        {
            size_t seckey;
            size_t newpos;

            seckey = 4*((hashValue&lt;E&gt;(e))%10);

            newpos = (pos + seckey) % nmax;

            while (newpos != pos)
            {
                if (status[newpos] == empty)
                    return false;
                else
                {
                    if(status[newpos] == filled)
                        if (values[newpos] == e)
                            return true;
                        else
                            newpos = (newpos + seckey) % nmax;
                }
            }
        }
    }
    return false; // return hier ?
}
</code></pre>
<p>Die tiefe Einrückung des tiefsten else ist schon erschreckend.</p>
<p>Dann nehme ich mir das erste if und bringe die unmittelbare Wirkung dichter an die Abfrage.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t key;
    size_t pos;

    key = hashValue&lt;E&gt;(e);
    pos = key % nmax;

    if(status[pos] != filled)
        return false;

    if (values[pos] == e)
        return true;
    else
    {
        size_t seckey;
        size_t newpos;

        seckey = 4*((hashValue&lt;E&gt;(e))%10);

        newpos = (pos + seckey) % nmax;

        while (newpos != pos)
        {
            if (status[newpos] == empty)
                return false;
            else
            {
                if(status[newpos] == filled)
                    if (values[newpos] == e)
                        return true;
                    else
                        newpos = (newpos + seckey) % nmax;
            }
        }
    }
    return false; // return hier ?
}
</code></pre>
<p>Noch ein nutzloses else wegmachen...</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t key;
    size_t pos;

    key = hashValue&lt;E&gt;(e);
    pos = key % nmax;

    if(status[pos] != filled)
        return false;

    if (values[pos] == e)
        return true;

    size_t seckey;
    size_t newpos;

    seckey = 4*((hashValue&lt;E&gt;(e))%10);

    newpos = (pos + seckey) % nmax;

    while (newpos != pos)
    {
        if (status[newpos] == empty)
            return false;
        else
        {
            if(status[newpos] == filled)
                if (values[newpos] == e)
                    return true;
                else
                    newpos = (newpos + seckey) % nmax;
        }
    }
    return false; // return hier ?
}
</code></pre>
<p>Definitionen später machen.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;

    if(status[pos] != filled)
        return false;

    if (values[pos] == e)
        return true;

    size_t key = hashValue&lt;E&gt;(e);

    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);

    size_t newpos = (pos + seckey) % nmax;

    while (newpos != pos)
    {
        if (status[newpos] == empty)
            return false;
        else
        {
            if(status[newpos] == filled)
                if (values[newpos] == e)
                    return true;
                else
                    newpos = (newpos + seckey) % nmax;
        }
    }
    return false; // return hier ?
}
</code></pre>
<p>Noch ein else weg.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;

    if(status[pos] != filled)
        return false;

    if (values[pos] == e)
        return true;

    size_t key = hashValue&lt;E&gt;(e);

    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);

    size_t newpos = (pos + seckey) % nmax;

    while (newpos != pos)
    {
        if (status[newpos] == empty)
            return false;
        if(status[newpos] == filled)
            if (values[newpos] == e)
                return true;
            else
                newpos = (newpos + seckey) % nmax;
    }
    return false; // return hier ?
}
</code></pre>
<p>Und gleich noch eins.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;

    if(status[pos] != filled)
        return false;

    if (values[pos] == e)
        return true;

    size_t key = hashValue&lt;E&gt;(e);

    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);

    size_t newpos = (pos + seckey) % nmax;

    while (newpos != pos)
    {
        if (status[newpos] == empty)
            return false;
        if(status[newpos] == filled)
            if (values[newpos] == e)
                return true;
            newpos = (newpos + seckey) % nmax;
    }
    return false; // return hier ?
}
</code></pre>
<p>Hier (und nur hier) muß ich was über das Programm wissen. Gibt es nur filled und empty als Status? Ich nehme an, ja. Dann geht</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;

    if(status[pos] != filled)
        return false;

    if (values[pos] == e)
        return true;

    size_t key = hashValue&lt;E&gt;(e);

    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);

    size_t newpos = (pos + seckey) % nmax;

    while (newpos != pos)
    {
        if (status[newpos] == empty)
            return false;
        if (values[newpos] == e)
            return true;
        newpos = (newpos + seckey) % nmax;
    }
    return false; // return hier ?
}
</code></pre>
<p>Mal ein paar Leerzeilen weg.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;
    if(status[pos] != filled)
        return false;
    if (values[pos] == e)
        return true;
    size_t key = hashValue&lt;E&gt;(e);
    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);
    size_t newpos = (pos + seckey) % nmax;
    while (newpos != pos)
    {
        if (status[newpos] == empty)
            return false;
        if (values[newpos] == e)
            return true;
        newpos = (newpos + seckey) % nmax;
    }
    return false; // return hier ?
}
</code></pre>
<p>Jetzt hat der äußere Kram eine gewisse Ähnlichkeit mit dem Kram innerhalb der Schleife. Sollten sie etwa auch was ähnliches machen?</p>
<p>Ah, noch gleicher machen.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;
    if(status[pos] == empty)
        return false;
    if (values[pos] == e)
        return true;
    size_t key = hashValue&lt;E&gt;(e);
    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);
    size_t newpos = (pos + seckey) % nmax;
    while (newpos != pos)
    {
        if (status[newpos] == empty)
            return false;
        if (values[newpos] == e)
            return true;
        newpos = (newpos + seckey) % nmax;
    }
    return false; // return hier ?
}
</code></pre>
<p>Schau, rätsel, guck...<br />
Ah, die while-Schleife war evtl eine ungeschickte Wahl.<br />
<code>newpos = (pos + seckey) % nmax</code><br />
direkt vor der Schleife und als Weiterschaltungsausdruck, das riecht nach einem dreiviertel Takt unwinding, um die Bedingung an den Anfang (ins while) zu kriegen.</p>
<p>Da mache ich erstmal for(;;) draus, um frei winden zu können.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;
    if(status[pos] == empty)
        return false;
    if (values[pos] == e)
        return true;
    size_t key = hashValue&lt;E&gt;(e);
    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);
    size_t newpos = (pos + seckey) % nmax;
    for(;;)
    {
        if (newpos == pos)
            break;
        if (status[newpos] == empty)
            return false;
        if (values[newpos] == e)
            return true;
        newpos = (newpos + seckey) % nmax;
    }
    return false; // return hier ?
}
</code></pre>
<p>*kurbel*</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;
    if(status[pos] == empty)
        return false;
    if (values[pos] == e)
        return true;
    size_t key = hashValue&lt;E&gt;(e);
    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);
    size_t newpos = pos;
    for(;;)
    {
        newpos = (newpos + seckey) % nmax;
        if (newpos == pos)
            break;
        if (status[newpos] == empty)
            return false;
        if (values[newpos] == e)
            return true;
    }
    return false; // return hier ?
}
</code></pre>
<p>*kurbel*</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;
    if(status[pos] == empty)
        return false;
    size_t key = hashValue&lt;E&gt;(e);
    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);
    size_t newpos = pos;
    for(;;)
    {
        if (values[newpos] == e)
            return true;
        newpos = (newpos + seckey) % nmax;
        if (newpos == pos)
            break;
        if (status[newpos] == empty)
            return false;
    }
    return false; // return hier ?
}
</code></pre>
<p>*kurbel*</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t pos = key % nmax;
    size_t key = hashValue&lt;E&gt;(e);
    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);
    size_t newpos = pos;
    for(;;)
    {
        if (status[newpos] == empty)
            return false;
        if (values[newpos] == e)
            return true;
        newpos = (newpos + seckey) % nmax;
        if (newpos == pos)
            break;
    }
    return false; // return hier ?
}
</code></pre>
<p>So, jetzt wissen wir auch, was loop-winding ist.</p>
<p>Die Laufbedingung ist jetzt unten. Also do-Schleife.</p>
<pre><code class="language-cpp">{
    size_t pos = key % nmax;
    size_t key = hashValue&lt;E&gt;(e);
    size_t seckey = 4*((hashValue&lt;E&gt;(e))%10);
    size_t newpos = pos;
    do
    {
        if (status[newpos] == empty)
            return false;
        if (values[newpos] == e)
            return true;
        newpos = (newpos + seckey) % nmax;
    }while (newpos != pos);
    return false; // return hier ?
}
</code></pre>
<p>Noch eine Doppelberechnung weg.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t key = hashValue&lt;E&gt;(e);
    size_t pos = key % nmax;
    size_t seckey = 4*key%10;
    size_t newpos = pos;
    do
    {
        if (status[newpos] == empty)
            return false;
        if (values[newpos] == e)
            return true;
        newpos = (newpos + seckey) % nmax;
    }while (newpos != pos);
    return false; // return hier ?
}
</code></pre>
<p>Umnennen.</p>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t key = hashValue&lt;E&gt;(e);
    size_t startpos = key % nmax;
    size_t seckey = 4*key%10;
    size_t newpos = pos;
    do
    {
        if (status[newpos] == empty)
            return false;
        if (values[newpos] == e)
            return true;
        newpos = (newpos + seckey) % nmax;
    }while (newpos != startpos);
    return false; // return hier ?
}
</code></pre>
<pre><code class="language-cpp">template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{
    size_t key = hashValue&lt;E&gt;(e);
    size_t startpos = key % nmax;
    size_t seckey = 4*key%10;
    size_t pos = startpos;
    do
    {
        if (status[pos] == empty)
            return false;
        if (values[pos] == e)
            return true;
        pos = (pos + seckey) % nmax;
    }while (pos != startpos);
    return false; // return hier ?
}
</code></pre>
<p>Klappt doch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2213005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2213005</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 19 May 2012 06:33:10 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Sat, 19 May 2012 10:00:26 GMT]]></title><description><![CDATA[<p>Alle lokalen Variablen außer pos kannste auch noch const-en.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2213034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2213034</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 19 May 2012 10:00:26 GMT</pubDate></item><item><title><![CDATA[Reply to Methode member - Problem mit Klammern&#x2F;else on Sat, 19 May 2012 10:06:47 GMT]]></title><description><![CDATA[<p>Wenn Du noch</p>
<pre><code class="language-cpp">size_t startpos = key % nmax;
    size_t seckey = key % (nmax-2);
</code></pre>
<p>machst und sowohl nmax-2 als auch nmax Primzahlen sind, haste laut Knuth praktisch keine Kollissionshäufungen (<a href="http://www.c-plusplus.net/forum/303550-11" rel="nofollow">Cluster</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2213037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2213037</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 19 May 2012 10:06:47 GMT</pubDate></item></channel></rss>