<?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[Evolutionärer Algorithmus&#x2F;Strukturen]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich arbeite momentan an einem evolutionären Algorithmus. Dabei unterscheidet man zwischen Individuen und Populationen, wobei X Individuen zu einer Population gehören. Um die Entwicklung meiner Individuen/Populationen verfolgen zu können, habe ich Datenpakete angelegt und diese in einer Hierarchie strukturiert. Die Datenpakete sind bei mir Strukturen(struct), da ich noch mit Ansi C arbeite. Konkret sieht der Aufbau bei mir folgendermaßen aus:</p>
<pre><code>//Struktur zur Aufnahme von Residueninfos---------------------------------------
        typedef struct CurRes{
            int pol;
            int X;
            int Y;
        }CuRe;

        typedef struct ResDatCol{
            CuRe *ResDat;
            int NumPos;
            int NumNeg;
            int NumRes;
        }ReDa;

//Struktur zur Aufnahme der Population------------------------------------------
        typedef struct indstr{
            double *Ampl;
            double *Phse;
            double fitness;
            ReDa *Res;
        }IndTempl;

        typedef struct popstr{
            int iIFTA;  //index IFTA
            int iGen;   //index Generation
            IndTempl *Ind;
        }PopTempl;

        PopTempl Popula1;

//Initialisierung der Populationsstruktur
    Popula1.iIFTA=0;
    Popula1.iGen=0;
    Popula1.Ind=new IndTempl[psz];
    for(int i=0;i&lt;psz;i++)
    {
        Popula1.Ind[i].Ampl=new double[sizePIC];
        Popula1.Ind[i].Phse=new double[sizePIC];
        Popula1.Ind[i].Res=new ReDa;
        Popula1.Ind[i].fitness=0;
        //Initialisierung der ResiduenStruktur
            (Popula1.Ind[i].Res)-&gt;ResDat=NULL; //[b]das Array, auf das der Zeiger zeigt, wird ständig in seiner Größe verändert(momentan mit realloc())[/b]
            (Popula1.Ind[i].Res)-&gt;NumPos=0;
            (Popula1.Ind[i].Res)-&gt;NumNeg=0;
            (Popula1.Ind[i].Res)-&gt;NumRes=0;
    }
</code></pre>
<p>Ich hoffe, ihr kommt mit dem code klar, er soll ja nur den inneren Aufbau verdeutlichen. Nun besteht mein Problem darin, dass diese Struktur sehr flexibel sein muss. Ich muss z.B. die Anzahl der Individuen variieren können. Das ist zwar mit den verketteten Strukturen auch möglich, bedeutet für mich aber bislang ein permanent umständliches allokieren/initialisieren/deallokieren von Speicher.<br />
Darum frage ich: gibt es in C++ eine Möglichkeit diese Strukturen geschickter anzulegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241549/evolutionärer-algorithmus-strukturen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 05:06:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241549.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 May 2009 09:53:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Fri, 22 May 2009 09:53:28 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich arbeite momentan an einem evolutionären Algorithmus. Dabei unterscheidet man zwischen Individuen und Populationen, wobei X Individuen zu einer Population gehören. Um die Entwicklung meiner Individuen/Populationen verfolgen zu können, habe ich Datenpakete angelegt und diese in einer Hierarchie strukturiert. Die Datenpakete sind bei mir Strukturen(struct), da ich noch mit Ansi C arbeite. Konkret sieht der Aufbau bei mir folgendermaßen aus:</p>
<pre><code>//Struktur zur Aufnahme von Residueninfos---------------------------------------
        typedef struct CurRes{
            int pol;
            int X;
            int Y;
        }CuRe;

        typedef struct ResDatCol{
            CuRe *ResDat;
            int NumPos;
            int NumNeg;
            int NumRes;
        }ReDa;

//Struktur zur Aufnahme der Population------------------------------------------
        typedef struct indstr{
            double *Ampl;
            double *Phse;
            double fitness;
            ReDa *Res;
        }IndTempl;

        typedef struct popstr{
            int iIFTA;  //index IFTA
            int iGen;   //index Generation
            IndTempl *Ind;
        }PopTempl;

        PopTempl Popula1;

//Initialisierung der Populationsstruktur
    Popula1.iIFTA=0;
    Popula1.iGen=0;
    Popula1.Ind=new IndTempl[psz];
    for(int i=0;i&lt;psz;i++)
    {
        Popula1.Ind[i].Ampl=new double[sizePIC];
        Popula1.Ind[i].Phse=new double[sizePIC];
        Popula1.Ind[i].Res=new ReDa;
        Popula1.Ind[i].fitness=0;
        //Initialisierung der ResiduenStruktur
            (Popula1.Ind[i].Res)-&gt;ResDat=NULL; //[b]das Array, auf das der Zeiger zeigt, wird ständig in seiner Größe verändert(momentan mit realloc())[/b]
            (Popula1.Ind[i].Res)-&gt;NumPos=0;
            (Popula1.Ind[i].Res)-&gt;NumNeg=0;
            (Popula1.Ind[i].Res)-&gt;NumRes=0;
    }
</code></pre>
<p>Ich hoffe, ihr kommt mit dem code klar, er soll ja nur den inneren Aufbau verdeutlichen. Nun besteht mein Problem darin, dass diese Struktur sehr flexibel sein muss. Ich muss z.B. die Anzahl der Individuen variieren können. Das ist zwar mit den verketteten Strukturen auch möglich, bedeutet für mich aber bislang ein permanent umständliches allokieren/initialisieren/deallokieren von Speicher.<br />
Darum frage ich: gibt es in C++ eine Möglichkeit diese Strukturen geschickter anzulegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714058</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Fri, 22 May 2009 09:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Fri, 22 May 2009 10:16:43 GMT]]></title><description><![CDATA[<p>einfach alles in klassen packen? c++ kann ja nicht umsonst OOP.<br />
ansonsten versuchst doch mal mit boost smart pointern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714071</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Fri, 22 May 2009 10:16:43 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Fri, 22 May 2009 10:13:56 GMT]]></title><description><![CDATA[<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Darum frage ich: gibt es in C++ eine Möglichkeit diese Strukturen geschickter anzulegen?</p>
</blockquote>
<p>als einstieg: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-143816.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-143816.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714072</guid><dc:creator><![CDATA[sichadat]]></dc:creator><pubDate>Fri, 22 May 2009 10:13:56 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Sat, 23 May 2009 13:19:12 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Zunächst mal Dank für die Hilfe! Habe mir den Beitrag zu den containerklassen durchgelesen und bin nun bemüht, meinen code auf vectoren umzustellen. Vectoren scheinen eigentlich recht einfach handhabbar zu sein, nur hab ich sie noch nicht vollständig verstanden. Angenommen ich würde wie folgt einen vector deklarieren: vector&lt;T&gt; v. Es wird gesagt, dass ein vector automatisch mehr Speicher allokiert als nötig, damit nicht bei jeder Erweiterung reallokiert werden muss. Wie groß wäre somit solch ein vector, wieviele Elemente könnte ich vom Typ T nun anfügen, ohne den vector erweitern zu müssen? Wie wird bestimmt/wie bestimmt man, wieviel mehr an Speichel allokiert wird?<br />
Angenommen mein Datentyp T wäre eine Klasse, und der Klasse hätte ich einen Konstruktor mitgegeben. Wird dann für jedes neue Element dieser Konstruktor aufgerufen?</p>
<p>Ich hoffe, man nimmt es mir nicht übel, dass ich derartige Fragen poste. Sicherlich könnte ich mir diese Fragen auch per try&amp;error selbst beantworten, nur hoffe ich, dass ich somit schneller ans Ziel komme.</p>
<p>Dank im Voraus!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714583</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Sat, 23 May 2009 13:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Sat, 23 May 2009 16:38:15 GMT]]></title><description><![CDATA[<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Angenommen ich würde wie folgt einen vector deklarieren: vector&lt;T&gt; v. Es wird gesagt, dass ein vector automatisch mehr Speicher allokiert als nötig, damit nicht bei jeder Erweiterung reallokiert werden muss. Wie groß wäre somit solch ein vector, wieviele Elemente könnte ich vom Typ T nun anfügen, ohne den vector erweitern zu müssen?</p>
</blockquote>
<p>Am Anfang wird der Vector wohl fast keinen Speicher reservieren. Eine übliche Implementierung sieht so aus, dass die Kapazität (reservierter Speicher) jeweils verdoppelt wird, wenn sie nicht mehr ausreicht. Du kannst diese mit der Memberfunktion <code>capacity()</code> abfragen.</p>
<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Wie wird bestimmt/wie bestimmt man, wieviel mehr an Speichel allokiert wird?</p>
</blockquote>
<p>Wirklich bestimmen kannst du das nicht. Du kannst aber Einfluss nehmen, indem du <code>reserve()</code> einsetzt - dann stellt der <code>std::vector</code> mindestens so viel Speicher zur Verfügung. Genaueres erfährst du unter <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> - das sollte bei dir das Nachschlagewerk zur Standardbibliothek sein.</p>
<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Angenommen mein Datentyp T wäre eine Klasse, und der Klasse hätte ich einen Konstruktor mitgegeben. Wird dann für jedes neue Element dieser Konstruktor aufgerufen?</p>
</blockquote>
<p>Kommt drauf an. Wenn du zum Beispiel einen <code>std::vector</code> mit 12 Elementen erstellst, wird für diese der Standardkonstruktor aufgerufen. Übergibst du zusätzlich einen Wert, mit dem die 12 Elemente initialisiert werden sollten oder fügst du etwas nachträglich ein, kommt der Kopierkonstruktor zum Zug.</p>
<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Ich hoffe, man nimmt es mir nicht übel, dass ich derartige Fragen poste. Sicherlich könnte ich mir diese Fragen auch per try&amp;error selbst beantworten, nur hoffe ich, dass ich somit schneller ans Ziel komme.</p>
</blockquote>
<p>Nein, bestimmt nicht, solche Fragen sind völlig okay. Was ich zum Beispiel nicht besonders mag, sind absolute Anfängerfragen, die nur aus Faulheit resultieren, sich mit Theorie zu beschäftigen. Oder Fragen, die zwei Posts vorher beantwortet wurden. Aber mach dir da keine Gedanken, da sehe ich keine Probleme bei dir... <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>
<p>P.S. <code>std::vector</code> ist nicht der einzige Container der Standardbibliothek. In sichadats Link werden die STL-Container einander gegenübergestellt und die Vor- und Nachteile jeweils abgewogen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714622</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 23 May 2009 16:38:15 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Sat, 23 May 2009 16:51:44 GMT]]></title><description><![CDATA[<p>Nur mal als Einwurf:<br />
Du arbeitest noch mit ANSI C (siehe 1. Post), allerdings nutzt du den operator new[]? Wie soll das gehen? Und wieso tust du das überhaupt?</p>
<p>Außerdem sollte dir klar sein, dass so bald du die C++-Standard-Bibliothek nutzt, du deine C-Konformität verlierst...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714630</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 23 May 2009 16:51:44 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Sun, 24 May 2009 09:01:49 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Thx for your support! Aber ich hab da mal wieder ne Frage: Warum/Wofür brauche ich diesen Kopierkonstruktor überhaupt? Allgemein nimmt der Kopierkonstruktor eine Referenz auf ein Objekt desselben Typs als Parameter entgegen und hat die Aufgabe, eine Kopie des Objektes zu erstellen. Aber welche Bedeutung kommt ihm in Bezug auf Vektoren zu???<br />
Brauche ich einen speziellen Kopierkonstruktor, oder reicht der Standardkopierkonstruktor, der ja doch vom Compiler scheinbar selbst angelegt wird? Oder reicht dieser nicht, weil er zu den &quot;flachen&quot; Kopierkonstruktoren zählt? Auf den Begriff flach/tief bin ich bei Wikipedia gestossen(<a href="http://de.wikipedia.org/wiki/Kopierkonstruktor" rel="nofollow">http://de.wikipedia.org/wiki/Kopierkonstruktor</a>). Es werden zwei Beispiele zu jeweils einer Art von Konstruktor gegeben. Mein Problem beim zweiten Bsp für den flachen Kopierkonstruktor ist, dass in meinen Augen auch hier eine echte Kopie erstellt wird, da mit new char[] ein separater Speicherbereich existiert.</p>
<p>Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714833</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Sun, 24 May 2009 09:01:49 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Sun, 24 May 2009 10:31:30 GMT]]></title><description><![CDATA[<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Aber ich hab da mal wieder ne Frage: Warum/Wofür brauche ich diesen Kopierkonstruktor überhaupt? Allgemein nimmt der Kopierkonstruktor eine Referenz auf ein Objekt desselben Typs als Parameter entgegen und hat die Aufgabe, eine Kopie des Objektes zu erstellen. Aber welche Bedeutung kommt ihm in Bezug auf Vektoren zu???</p>
</blockquote>
<p>Nehmen wir an, du hast irgendwelche Objekte, die du in den Container einfügen willst.</p>
<pre><code class="language-cpp">MyClass obj1, obj2;
</code></pre>
<p>Nun willst du beim Einfügen, dass innerhalb des Containers eine Kopie gespeichert wird und du die Originale unabhängig davon weiter benutzen kannst. Also rufst du <code>push_back()</code> auf, und der Container kopiert die Werte und speichert die Kopien. Die Originale bleiben unverändert.</p>
<pre><code class="language-cpp">std::vector&lt;MyClass&gt; Vec;
Vec.push_back(obj1);
Vec.push_back(obj2);
</code></pre>
<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Brauche ich einen speziellen Kopierkonstruktor, oder reicht der Standardkopierkonstruktor, der ja doch vom Compiler scheinbar selbst angelegt wird? Oder reicht dieser nicht, weil er zu den &quot;flachen&quot; Kopierkonstruktoren zählt? Auf den Begriff flach/tief bin ich bei Wikipedia gestossen(<a href="http://de.wikipedia.org/wiki/Kopierkonstruktor" rel="nofollow">http://de.wikipedia.org/wiki/Kopierkonstruktor</a>). Es werden zwei Beispiele zu jeweils einer Art von Konstruktor gegeben. Mein Problem beim zweiten Bsp für den flachen Kopierkonstruktor ist, dass in meinen Augen auch hier eine echte Kopie erstellt wird, da mit new char[] ein separater Speicherbereich existiert.</p>
</blockquote>
<p>Der compilergenerierte Kopierkonstruktor (sowie auch der Zuweisungsoperator) kopiert Element für Element. Du musst dir überlegen, ob das für deine Klasse ausreicht. Hast du zum Beispiel einen Zeiger auf dynamisch allokierten Speicherbereich, so wird nur der Zeiger - und nicht der Speicherbereich - kopiert. Also musst du den Kopierkonstruktor selbst implementieren.</p>
<p>Sobald du Kopierkonstruktor, Zuweisungsoperator oder Destruktor selbst implementierst, musst du dich grundsätzlich auch um die anderen beiden kümmern (rule of the big three), damit dein Verhalten definiert bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714853</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 24 May 2009 10:31:30 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Sun, 24 May 2009 14:21:26 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Hab nun meine Header-/Quelldatei wie folgt aufgesetzt:</p>
<pre><code>class SingleRes
{
    public:
        int x;
        int y;
        int pol;

    public:
        SingleRes();
        SingleRes(const SingleRes&amp; rhs);
        SingleRes&amp; operator=(const SingleRes&amp; rhs);
        ~SingleRes();
}

#include &quot;SingleRes.h&quot;

//using namespace std;

//DefaultKonstruktor
SingleRes::SingleRes()
{
    x=0;
    y=0;
    pol=0;
}

//Kopierkonstruktor
SingleRes::SingleRes(const SingleRes&amp; rhs)
{
    x=rhs.x;
    y=rhs.y;
    pol=rhs.pol;
}

//Operatorfunktion
SingleRes&amp; SingleRes::operator=(const SingleRes&amp; rhs)
{
    x=rhs.x;
    y=rhs.y;
    return *this;
}

//Destruktor
SingleRes::~SingleRes(){}
</code></pre>
<p>Eigentlich recht einfach, nur meckert mein Compiler:<br />
12 C:\Users\LoKi.Ak\Desktop\StuffToday\C++\SingleRes.h expected <code>;' before '~' token 3 C:\\Users\\LoKi.Ak\\Desktop\\StuffToday\\C++\\SingleRes.cpp expected unqualified-id before &quot;using&quot; 3 C:\\Users\\LoKi.Ak\\Desktop\\StuffToday\\C++\\SingleRes.cpp expected</code>,' or <code>;' before &quot;using&quot; 23 C:\\Users\\LoKi.Ak\\Desktop\\StuffToday\\C++\\SingleRes.cpp no \</code>SingleRes&amp; SingleRes::operator=(const SingleRes&amp;)' member function declared in class `SingleRes'<br />
30 C:\Users\LoKi.Ak\Desktop\StuffToday\C++\SingleRes.cpp no `SingleRes::~SingleRes()' member function declared in class `SingleRes'</p>
<p>Erkennt jemand von Euch meinen Fehler?</p>
<p>Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714971</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Sun, 24 May 2009 14:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Sun, 24 May 2009 14:22:32 GMT]]></title><description><![CDATA[<p>Sicher, dass du alle nötigen Semikolons hast? <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/1714972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714972</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 24 May 2009 14:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Sun, 24 May 2009 14:38:28 GMT]]></title><description><![CDATA[<p>Nunja, hinter der Klasse habe ich noch ein Semikolon eingefügt, dass ändert aber leider auch nichts, die Fehlermeldung bleibt dieselbe. Was hat es überhaupt mit dem &quot;expected unqualified-id before &quot;using&quot;&quot; auf sich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714980</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Sun, 24 May 2009 14:38:28 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Sun, 24 May 2009 19:19:45 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hab nun nochmal Literatur gewälzt und die Methode des scharfen Hinsehens probiert, aber ich komme nicht dahinter, was bei mir falsch läuft. Vllt nimmt sich ja einer von Euch meiner an und wirft mal n Blick auf meinen code.</p>
<p>Zunächst die header-Datei:</p>
<pre><code>class SingleRes
{
    public:
        int x;
        int y;
        int pol;

    public:
        SingleRes();
        ~SingleRes();
        SingleRes(const SingleRes&amp; rhs);
        SingleRes&amp; operator=(const SingleRes&amp; rhs);
};
</code></pre>
<p>Dann die Quelldatei:</p>
<pre><code>#include &quot;SingleRes.h&quot;

//DefaultKonstruktor
SingleRes::SingleRes()
{
    x=0;
    y=0;
    pol=0;
}

//Destruktor
SingleRes::~SingleRes(){}

//Kopierkonstruktor
SingleRes::SingleRes(const SingleRes&amp; rhs)
{
    x=rhs.x;
    y=rhs.y;
    pol=rhs.pol;
}

//Operatorfunktion
SingleRes&amp; SingleRes::operator=(const SingleRes&amp; rhs)
{
    x=rhs.x;
    y=rhs.y;
    pol=rhs.pol;
    return *this;
}
</code></pre>
<p>Desweiteren soll in einer weiteren Klasse ein Vektor vom Typ der obigen Klasse deklariert(und somit auch definiert?) werden. Da die Elemente erst zur Laufzeit entstehen(und die Anzahl variiert), kann ich im Konstruktor nur einen Schätzwert über reserve() angeben. Seht Ihr bei meiner Konstruktion irgendwelche Gefahren auf mich zukommen? Hab ich den Kopierkonstruktor richtig aufgebaut?</p>
<p>headerDatei der zweiten Klasse:</p>
<pre><code>#include &lt;vector&gt;
class ResSet
{
    public:
        int ResPos;
        int ResNeg;
        int ResSum;
        int Diff;

        vector&lt;SingleRes&gt; R;

    public:
        ResSet();
        ~ResSet();
}
</code></pre>
<p>Zu guter Letzt: es zeigt sich bei mir, dass ich ein und dieselbe Funktion in verschiedenen Klassen brauche. Muss ich die Funktion also mehrfach schreiben? Wahrscheinlich nicht. Löst man das Problem über Bibliotheken? Oder gliedert man die gemeinsam genutzten Funktionen aus-z.B. in eine Klasse MathOpera-und erzeugt in den jeweiligen Klassen Objekte dieser MathOpera-Klasse?</p>
<p>Ich hoffe, dass war jetzt nicht zuviel des Guten!!!</p>
<p>Dank im voraus!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715085</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Sun, 24 May 2009 19:19:45 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Mon, 25 May 2009 08:13:18 GMT]]></title><description><![CDATA[<p>Nur mal so am Rande:<br />
<a href="http://shark-project.sourceforge.net/" rel="nofollow">http://shark-project.sourceforge.net/</a></p>
<p>Gibts alles schon <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>
<p>//edit zu deinem Code:<br />
Deine erste Klasse sieht in Ordnung aus. Allerdings muss ich dir mitteilen, dass bis auf den default-Konstruktor alle Methoden so sind, wie sie der Compiler auch automatisch erzeugen würde. Du brauchst sie also nicht.</p>
<p>Ansonsten würde ich dir raten, die variablen private zu machen und dann mit get/set funktionen drauf zuzugreifen. Über das reserve beim vector solltest du dir keine Gedanken machen. Normalerweise kannst du es bedenkenlos ignorieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715210</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 25 May 2009 08:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Mon, 25 May 2009 13:56:56 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Sicher gibt es schon längst evolutionäre Algorithmen, denn noch möchte ich mich selbst auf dem Feld probieren. Einfach um ein paar Dinge nachvollziehen zu können.</p>
<p>Also, wenn mit meinem code alles soweit in Ordnung ist, warum spuckt der compiler die zuvor geposteten Fehlermeldungen aus?? Hab ich irgendein include vergessen? Am namespace kann es schliesslich auch nicht liegen.</p>
<p>Und inwieweit muss ich mir über das reserve keine gedanken machen? Ist es in Verbindung mit vectoren nicht ratsam die erwartete Kapazität anzugeben? Soweit ich weiss, nimmt das Erweitern des Vektors &quot;viel&quot; Zeit in Anspruch.</p>
<p>Gruss!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715475</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Mon, 25 May 2009 13:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Mon, 25 May 2009 14:11:28 GMT]]></title><description><![CDATA[<blockquote>
<p>Also, wenn mit meinem code alles soweit in Ordnung ist, warum spuckt der compiler die zuvor geposteten Fehlermeldungen aus?</p>
</blockquote>
<p>Welchen Compiler nutzt du denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715482</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 25 May 2009 14:11:28 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Mon, 25 May 2009 14:23:18 GMT]]></title><description><![CDATA[<p>da fehlt ein semikolon am ende von</p>
<p>LoKi.aK schrieb:</p>
<blockquote>
<p>headerDatei der zweiten Klasse:</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1715492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715492</guid><dc:creator><![CDATA[unpräsenter halbdarm]]></dc:creator><pubDate>Mon, 25 May 2009 14:23:18 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Mon, 25 May 2009 14:43:20 GMT]]></title><description><![CDATA[<p>Meine IDE ist WxDev, das ja standardmäßig mit MinGW als compiler kommt. Ja, da fehlt doch wirklich so ein drecks semikolon...ändert aber auch nichts an der Fehlermeldung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715507</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Mon, 25 May 2009 14:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Mon, 25 May 2009 14:48:19 GMT]]></title><description><![CDATA[<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Und inwieweit muss ich mir über das reserve keine gedanken machen? Ist es in Verbindung mit vectoren nicht ratsam die erwartete Kapazität anzugeben? Soweit ich weiss, nimmt das Erweitern des Vektors &quot;viel&quot; Zeit in Anspruch.</p>
</blockquote>
<p>Wenn du ungefähr weisst, wie viel Speicherplatz der <code>std::vector</code> benötigt, ist <code>reserve()</code> okay. Aber wenn du zuerst eine komplizierte Abschätzung durchführen musst, mit der du dann trotzdem in der Hälfte der Fälle falsch liegst, überlässt du die Speicherverwaltung lieber dem <code>std::vector</code> . Eine Reallokation dauert erst spürbar lange bei wirklich vielen bzw. grossen Elementen, dafür kannst du in einigen Fällen Speicherplatz sparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715513</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 25 May 2009 14:48:19 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Mon, 25 May 2009 15:48:37 GMT]]></title><description><![CDATA[<p>Da bei mir im worstcase 1024x1024 vectorelemente vom typ SingleRes möglich sind, dachte ich mir, lege ich im ersten Schritt 1/4 der Maximalmenge vor. Eine Reduzierung am Schluss auf die tatsächliche Kapazität sollte ja doch nicht kompliziert/aufwendig sein, da vectoren doch bei operationen auf die letzten elemente einen geringen(/konstanten) zeitaufwand haben!?!?</p>
<p>Könnten die Fehlermeldungen mit meinem compiler zusammenhängen? Inwiefern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715558</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Mon, 25 May 2009 15:48:37 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Mon, 25 May 2009 19:28:03 GMT]]></title><description><![CDATA[<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Eine Reduzierung am Schluss auf die tatsächliche Kapazität sollte ja doch nicht kompliziert/aufwendig sein, da vectoren doch bei operationen auf die letzten elemente einen geringen(/konstanten) zeitaufwand haben!?!?</p>
</blockquote>
<p>Nicht kompliziert, aber unmöglich. Ein <code>std::vector</code> gibt den angeforderten Speicher eigentlich erst im Destruktor wieder frei. Von daher solltest du vorsichtig sein mit präventiven Allokationen. Vielleicht besser, du überlässt das Speichermanagement dem <code>std::vector</code> .</p>
<p>Und die Operationen auf dem letzten Element haben eine (amortisiert) konstante Zeitkomplexität, jedoch gehen darunter eigentlich keine Reallokationen. Diese tragen nur zum &quot;amortisiert&quot; bei, in den meisten Fällen sind sie nicht nötig. Aber du kannst auch keinen Speicherbereich verkleinern, ohne ihn neu anzulegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715658</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 25 May 2009 19:28:03 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Mon, 25 May 2009 22:04:23 GMT]]></title><description><![CDATA[<p>Ok, war der Meinung man könne mit erase den vector zu schluss anpassen. Dabei veränder ich aber nur die Anzahl der Elemente, nicht die Größe des allokierten Speichers.</p>
<p>Eine andre Frage, die wahrscheinlich in blutigste Anfängerkategorie gehört:<br />
Ich habe in der Signatur(Übergabeparamter) zweier Funktionen zwei Variablen mit gleichem Namen deklariert, wobei die eine Funktion in der anderen aufgerufen wird. Soweit ich weiss, sind lokale Variable &quot;gekapselt&quot;, d.h. die eine Variable in der inneren bekommt beim Durchlaufen ihrer Funktion nichts von der anderen in der äußeren Funktion mit. Oder kann es da doch zu Komplikationen kommen?</p>
<p>Zuletzt noch eine ältere Frage:<br />
Es geht darum, dass ich ein und dieselbe Funktion in verschiedenen Klassen brauche. Muss ich die Funktion also mehrfach schreiben? Wahrscheinlich nicht. Löst man das Problem über Bibliotheken? Oder gliedert man die gemeinsam genutzten Funktionen aus-z.B. in eine Klasse MathOpera-und erzeugt in den jeweiligen Klassen Objekte dieser MathOpera-Klasse?</p>
<p>Sry, dass ich hier teilweise Anfängerfragen poste. Bin noch nicht lange dabei und bin bei vielem noch unsicher, da ich es nicht genau weiss!</p>
<p>Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715748</guid><dc:creator><![CDATA[LoKi.aK]]></dc:creator><pubDate>Mon, 25 May 2009 22:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Tue, 26 May 2009 06:19:51 GMT]]></title><description><![CDATA[<p>Deklariere die Funktion einfach außerhalb einer Klasse in einem Header, und implementiere sie dann in einer cpp Datei. In C++ musst du nicht alles in Klassen stecken <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/1715792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715792</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 26 May 2009 06:19:51 GMT</pubDate></item><item><title><![CDATA[Reply to Evolutionärer Algorithmus&#x2F;Strukturen on Tue, 26 May 2009 17:35:57 GMT]]></title><description><![CDATA[<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Ich habe in der Signatur(Übergabeparamter) zweier Funktionen zwei Variablen mit gleichem Namen deklariert, wobei die eine Funktion in der anderen aufgerufen wird.</p>
</blockquote>
<p>Sofern die Variablen in unterschiedlichen Scopes deklariert wurden (im gleichen Scope ist gar nicht möglich), benutzt du automatisch die des innersten Gültigkeitsbereiches, also quasi die lokalste. Innerhalb einer Funktion sind nur Parameter, globale und lokale Variablen bekannt - nicht aber die aus anderen Scopes.</p>
<p>LoKi.aK schrieb:</p>
<blockquote>
<p>Es geht darum, dass ich ein und dieselbe Funktion in verschiedenen Klassen brauche. Muss ich die Funktion also mehrfach schreiben?</p>
</blockquote>
<p>Nein. Mehrfach schreiben solltest du grundsätzlich nichts. Implementiere die Funktion wie von otze erwähnt als freie Funktion, eventuell in einem eigenen Namensraum. Es hat keinen Sinn, eine Klasse &quot;MathOpera&quot; zu erzeugen, die nur ein paar Funktionen zusammenfasst. Da machst du lieber einen <code>namespace</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716264</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 26 May 2009 17:35:57 GMT</pubDate></item></channel></rss>