<?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[Konstruktor für vektoren]]></title><description><![CDATA[<p>Ich möchte einen Vektor von Objekten meiner Klasse &quot;test&quot; erstellen.<br />
Der Vektor enthält 20 Elemente.<br />
Muss ich den Konstruktor für jedes Vektorelement aufrufen????<br />
(in einer for-schleiefe???)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280628/konstruktor-für-vektoren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 01:15:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280628.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 Jan 2011 17:35:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor für vektoren on Tue, 18 Jan 2011 17:35:21 GMT]]></title><description><![CDATA[<p>Ich möchte einen Vektor von Objekten meiner Klasse &quot;test&quot; erstellen.<br />
Der Vektor enthält 20 Elemente.<br />
Muss ich den Konstruktor für jedes Vektorelement aufrufen????<br />
(in einer for-schleiefe???)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008389</guid><dc:creator><![CDATA[web1]]></dc:creator><pubDate>Tue, 18 Jan 2011 17:35:21 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor für vektoren on Tue, 18 Jan 2011 17:43:46 GMT]]></title><description><![CDATA[<p>häh wie sieht dein Code aus? meinst du ein Array oder std::vector? Zeig mal was du genau meinst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008401</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 18 Jan 2011 17:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor für vektoren on Tue, 18 Jan 2011 17:51:48 GMT]]></title><description><![CDATA[<p>Ich meinte das folgendermaßen:</p>
<pre><code>Module movModules[ readin.getnumModules() - readin.getnumTerminals() ]
</code></pre>
<p>Von der Klasse Module wird ein Array angelegt das eine variable Menge an Array-Elementen enthält. Wird der Konstruktor gleich für jedes Array-Element aufgerufen?<br />
Wie könnte man unterschiedliche Konstruktoren für die Einzelnen Elemente definieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008409</guid><dc:creator><![CDATA[web1]]></dc:creator><pubDate>Tue, 18 Jan 2011 17:51:48 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor für vektoren on Tue, 18 Jan 2011 18:04:44 GMT]]></title><description><![CDATA[<p>Du musst alle initialisieren. std::vector ist da deutlich komfortabler...</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;

using namespace std;

class MyClass
{
public:
	MyClass(int a, int b, int c) : a(a), b(b), c(c) {}´
    //Mehr Konstuktoren etc...

	void Print()
	{
		cout &lt;&lt; &quot;a: &quot; &lt;&lt; a &lt;&lt; &quot;b: &quot; &lt;&lt; b &lt;&lt; &quot;c: &quot; &lt;&lt; c &lt;&lt; endl;
	}

private:
	int a, b, c;
};

int main() 
{ 
	vector &lt;MyClass&gt; myclasses;

	myclasses.push_back(MyClass(1,2,3));
	myclasses.push_back(MyClass(4,7,3));
	myclasses.push_back(MyClass(1,4,3));
	myclasses.push_back(MyClass(4,3,3));

	for(vector &lt;MyClass&gt;::iterator i = myclasses.begin(); i != myclasses.end(); ++i)
		i-&gt;Print();

    return 0; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2008419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008419</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 18 Jan 2011 18:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor für vektoren on Tue, 18 Jan 2011 19:48:49 GMT]]></title><description><![CDATA[<p>web1 schrieb:</p>
<blockquote>
<p>Ich meinte das folgendermaßen:</p>
<pre><code>Module movModules[ readin.getnumModules() - readin.getnumTerminals() ]
</code></pre>
<p>Von der Klasse Module wird ein Array angelegt das eine variable Menge an Array-Elementen enthält. Wird der Konstruktor gleich für jedes Array-Element aufgerufen?<br />
Wie könnte man unterschiedliche Konstruktoren für die Einzelnen Elemente definieren?</p>
</blockquote>
<p>Ein solches Array mit variabler Elementanzahl ist in C++ nicht möglich. Der Compiler spuckt dir einen Fehler aus, dass die Anzahl der Elemente konstant sein soll.</p>
<p>Wenn du eine Konstante wählst, dann werden auch die Konstruktoren aufgerufen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct MyClass
{
	MyClass() : value(42)
	{
		std::cout &lt;&lt; &quot;constructor call&quot; &lt;&lt; std::endl;
	}

	int value;
};

int main()
{
	MyClass foo[10];
	std::cout &lt;&lt; foo[0].value &lt;&lt; std::endl;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>constructor call
constructor call
constructor call
constructor call
constructor call
constructor call
constructor call
constructor call
constructor call
constructor call
42
</code></pre>
<p>HighLigerBiMBam schrieb:</p>
<blockquote>
<p>std::vector ist da deutlich komfortabler...</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;

using namespace std;

class MyClass
{
public:
	MyClass(int a, int b, int c) : a(a), b(b), c(c) {}´
    //Mehr Konstuktoren etc...

	void Print()
	{
		cout &lt;&lt; &quot;a: &quot; &lt;&lt; a &lt;&lt; &quot;b: &quot; &lt;&lt; b &lt;&lt; &quot;c: &quot; &lt;&lt; c &lt;&lt; endl;
	}

private:
	int a, b, c;
};

int main() 
{ 
	vector &lt;MyClass&gt; myclasses;

	myclasses.push_back(MyClass(1,2,3));
	myclasses.push_back(MyClass(4,7,3));
	myclasses.push_back(MyClass(1,4,3));
	myclasses.push_back(MyClass(4,3,3));

	for(vector &lt;MyClass&gt;::iterator i = myclasses.begin(); i != myclasses.end(); ++i)
		i-&gt;Print();

    return 0; 
}
</code></pre>
</blockquote>
<p>std::vector ist zum Befüllen nicht komfortabler, sondern im Gegenteil richtig ätzend, wie du selbst mit deinem Code zeigst. Das hat sich aber zum Glück mit boost::assign geändert und wird sich mit dem kommenden Standard ebenfalls verbessern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008481</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 18 Jan 2011 19:48:49 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor für vektoren on Tue, 18 Jan 2011 20:07:05 GMT]]></title><description><![CDATA[<p>Ich finde nicht, dass ein Defaultkonstruktor eine gescheite Initialisierungsmöglichkeit bietet bzw. ist!</p>
<pre><code class="language-cpp">MyClass *myclass = new MyClass[5];
</code></pre>
<p>Ich kann jetzt zwar allen den selben Konstruktor geben, muss aber wenn ich unterschiedliche Initialisierungen haben will. Extra Funktionen Aufrufen. Das habe ich im Fall des Vektors nicht. Da stellt sich echt die Frage, was hässlicher ist?</p>
<pre><code class="language-cpp">MyClass *myclass = new MyClass[5]
MyClass[0].Init(1,2,3);
MyClass[1].Init(4,7,3);
MyClass[2].Init(2,2,3);
MyClass[3].Init(1,4,3);
MyClass[4].Init(1,2,8);

//oder Vektor verwenden
</code></pre>
<p>Hier muss ich auch noch 2-mal Werte zuweisen. (Konstruktor und Init) Man kann das natürlich gescheiter schreiben, aber das kann man dann mit dem vector auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008489</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 18 Jan 2011 20:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor für vektoren on Tue, 18 Jan 2011 20:24:11 GMT]]></title><description><![CDATA[<p>HighLigerBiMBam schrieb:</p>
<blockquote>
<p>Ich finde nicht, dass ein Defaultkonstruktor eine gescheite Initialisierungsmöglichkeit bietet bzw. ist!</p>
<pre><code class="language-cpp">MyClass *myclass = new MyClass[5];
</code></pre>
<p>Ich kann jetzt zwar allen den selben Konstruktor geben, muss aber wenn ich unterschiedliche Initialisierungen haben will. Extra Funktionen Aufrufen. Das habe ich im Fall des Vektors nicht. Da stellt sich echt die Frage, was hässlicher ist?</p>
<pre><code class="language-cpp">MyClass *myclass = new MyClass[5]
MyClass[0].Init(1,2,3);
MyClass[1].Init(4,7,3);
MyClass[2].Init(2,2,3);
MyClass[3].Init(1,4,3);
MyClass[4].Init(1,2,8);

//oder Vektor verwenden
</code></pre>
<p>Hier muss ich auch noch 2-mal Werte zuweisen. (Konstruktor und Init)</p>
</blockquote>
<p>Wenn man Placement New (OP: googlen!) benutzt, bekommt man die unterschiedlichen Initialisierungen mit unterschiedlichen Konstruktoren und die doppelte Zuweisung und die Init-Funktionen (igitt) fallen weg. (Edit: Ein zusätzliches memset() muss man wahrscheinlich in Kauf nehmen).</p>
<p>Wenn man eine variable Anzahl von Elementen unterschiedlich initialisieren will, sehe ich den Schreibarbeitsvorteil weder bei Arrays noch bei std::vector. Wenn es eine konstante Anzahl ist, sind Arrays allerdings weniger Arbeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008495</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 18 Jan 2011 20:24:11 GMT</pubDate></item></channel></rss>