<?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[Struct]]></title><description><![CDATA[<p>wie ein vector arbeitet is wohl klar</p>
<pre><code class="language-cpp">vector&lt;int&gt; data(4, 2);

printf(&quot;data[0] value: %d\n&quot;,data.at(0));
</code></pre>
<p>die frage ich nur wie ich das mit einem struct hinbekommen könnte, um später die einzelnen elemente des structs im vector ansprechen aber auch manipulieren zu können</p>
<pre><code class="language-cpp">struct data
{
    int param1;
    int param2;

    short ID;

    //.....
};

vector&lt;data&gt; data_storage;
//.....?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/295934/struct</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 07:32:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/295934.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Nov 2011 17:26:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 17:26:09 GMT]]></title><description><![CDATA[<p>wie ein vector arbeitet is wohl klar</p>
<pre><code class="language-cpp">vector&lt;int&gt; data(4, 2);

printf(&quot;data[0] value: %d\n&quot;,data.at(0));
</code></pre>
<p>die frage ich nur wie ich das mit einem struct hinbekommen könnte, um später die einzelnen elemente des structs im vector ansprechen aber auch manipulieren zu können</p>
<pre><code class="language-cpp">struct data
{
    int param1;
    int param2;

    short ID;

    //.....
};

vector&lt;data&gt; data_storage;
//.....?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2148331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148331</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Thu, 24 Nov 2011 17:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 17:30:48 GMT]]></title><description><![CDATA[<p>Du darfst Operationen auch gerne aneinander hängen. Der Rückgabewert von at (beziehungsweise dem Operator[]) ist ein data (oder genau genommen ein data&amp;). Und auf dieses darfst du gerne den Elementzugriffsoperator '.' anwenden:<br />
<code>data_storage[0].param1 = ...;</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148338</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 24 Nov 2011 17:30:48 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 17:49:35 GMT]]></title><description><![CDATA[<p>Ein fragälchen: wieso benutzt du printf?<br />
Und</p>
<pre><code class="language-cpp">std::vector&lt;data&gt; bla(/*z.B.*/ 5, data());

bla.at(0).param1 = 15;//oder
bla.front().param1 = 15;

//Die geben Referenzen auf die gelagerten Objekte zurück
</code></pre>
<p>schau mal <a href="http://www.cplusplus.com/reference/stl/vector/at/" rel="nofollow">hier</a>.</p>
<p>Edit: const_reference und reference sind afaik typedefs in den Klassen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148357</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 24 Nov 2011 17:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 20:24:22 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Ein fragälchen: wieso benutzt du printf?</p>
</blockquote>
<p>Ich habe viel mit C programmiert und naja, die alten Angewohnheiten wie printf();<br />
sind geblieben und noch heute in Benutzung <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="🙂"
    /><br />
std::cout mag vielleicht besser sein aber ich habe bis jetzt noch keine wirklich entscheidenden Gründe gefunden es anstatt printf zu nutzen, vielleicht kannst du mir ja welche sagen? <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>
<p>Also, ich hab jetzt ein bisschen rumprobiert und einen Konstruktor in meine Struktur eingebaut, endlich funktioniert es und sieht jetzt so aus:</p>
<pre><code class="language-cpp">struct data
{
   //beispiel attribut
   int param1

   //konstruktor
   data()
   {
      param1 = 0;
   }
};

int main()
{
   int ammount = 6;

   vector&lt;data&gt; data_storage;

   for(int init = 0; init &lt;= ammount; init++)
   {
      data_storage.push_back(data());
   }

   //...
}
</code></pre>
<p>wäre das soweit korrekt oder mache ich damit trotz Erfolgreicher Kompilation etwas falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148477</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Thu, 24 Nov 2011 20:24:22 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 20:31:01 GMT]]></title><description><![CDATA[<p>Tut mir leid, dich enttäuschen zu müssen, aber der Code ist schlichtweg nicht compilierbar. Du hast nämlich Semikolon in Zeile 4 vergessen.<br />
Spaß beiseite. Der Code sieht schon ok aus, aber du weißt schon, dass deine Schleife siebenmal durchlaufen wird, oder? Wenn bei ammount eine andere Zahl steht, kann das bei dem Einem oder Anderen ziemlich schnell zu Fehlern führen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148484</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Thu, 24 Nov 2011 20:31:01 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 20:33:04 GMT]]></title><description><![CDATA[<p>Du machst da einige stilistische Fehler:<br />
Man schreibt gerne ++i. In C egal, aber in C++ kann i wer weiß was sein, wo das einen Unterschied macht. Hier weißt du zwar, dass es int ist, aber dann ist es konsistent zu deinen anderen Schleifen.<br />
Das Setzen eines Members im Konstruktor gehört nicht in den Konstruktor sondern in die Initialisierungsliste.<br />
Die ganze Schleifenkonstruktion kannst du dir sparen, indem du den passenden Konstruktor von vector benutzt.<br />
printf benutzt man nicht in C++, da es mit den höheren Sprachkonzepten in C++ nicht kompatibel ist. Gewöhn es dir daher möglichst bald ab.<br />
Gewöhn dir auch vieles andere aus C ab, es sind quasi zwei verschiedene Sprachen mit gleicher Syntax. Gerne werden von ehemaligen C-Programmierern z.B. malloc, Arrays (insb. char-Arrays), Pointe, Funktionen im Stil der C-Standardbibliothek (d.h. Fehlerbehandlung durch Rückgabewert) und Funktionen der C-Standardbibliothek für die es in C++ einen Ersatz gibt benutzt. Du benutzt schon vector, das sieht gut aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148486</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 24 Nov 2011 20:33:04 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 20:40:07 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>std::cout mag vielleicht besser sein aber ich habe bis jetzt noch keine wirklich entscheidenden Gründe gefunden es anstatt printf zu nutzen, vielleicht kannst du mir ja welche sagen? <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>std::cout ist Typsicher.</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Also, ich hab jetzt ein bisschen rumprobiert und einen Konstruktor in meine Struktur eingebaut</p>
</blockquote>
<p>Eigentlich.. solltest du keinen (eigenen) Konstruktor brauchen.</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>wäre das soweit korrekt oder mache ich damit trotz Erfolgreicher Kompilation etwas falsch?</p>
</blockquote>
<p>Na ja, initialisierung im Konstruktor erledigt man möglichst in der Initialisierungsliste. Das sieht dann so aus:</p>
<pre><code class="language-cpp">struct A
{
  int i;
  char c;
  A()
    : i(5), c('z')  // &lt;-
  {}
</code></pre>
<p>Edit: Und das was SeppJ sagt. Sieh dir z.B. den Code von Hacker an, der std::vector hat bereits einen fertigen Konstruktor für das was du in der Schleife machst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148488</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 24 Nov 2011 20:40:07 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 20:50:27 GMT]]></title><description><![CDATA[<p>Wieso cout statt printf? <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>
<pre><code class="language-cpp">template &lt;class T&gt;
void printtwice(const T&amp; e)
{
	if(typeid(T) == typeid(int))
		std::printf(&quot;%i%i&quot;, e, e);
	if(typeid(T) == typeid(double))
		std::printf(&quot;%f%f&quot;, e, e);
	//-...........
}
</code></pre>
<pre><code class="language-cpp">template &lt;class T&gt;
void printtwice(const T&amp; e)
{
	std::cout &lt;&lt; e &lt;&lt; e;
}
</code></pre>
<p>Oder ginge das mit printf auch anders?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148494</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 24 Nov 2011 20:50:27 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 21:01:27 GMT]]></title><description><![CDATA[<p>Und operator &lt;&lt; kann noch mehr (man glaubt es kaum), passt sogar zu deinem Eingangsposting:</p>
<pre><code class="language-cpp">struct Point
{
  float x, y, z;
  Point(float x_, float y_, float z_)
    : x(x_), y(y_), z(z_)
  {}
};

std::ostream &amp;operator &lt;&lt; (std::ostream &amp;stream, const Point &amp;point)
{
  stream &lt;&lt; &quot;(x: &quot; &lt;&lt; point.x &lt;&lt; &quot; y: &quot; &lt;&lt; point.y &lt;&lt; &quot; z: &quot; &lt;&lt; point.z &lt;&lt; &quot;)&quot;;
  return stream;
}

int main()
{
  Point point(4.534f, 7.46f, 23.46f);
  std::cout &lt;&lt; point;
}
</code></pre>
<p>Edit:<br />
Was halt stört ist, dass man für jedes &lt;&lt; einen Funktionsaufruf hat. Multithreading ist so quasi nicht möglich (man muss halt irgendwie manuell locken).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148498</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 24 Nov 2011 21:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 20:58:52 GMT]]></title><description><![CDATA[<p>Überladung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148499</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 24 Nov 2011 20:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Thu, 24 Nov 2011 23:43:14 GMT]]></title><description><![CDATA[<p>Danke euch für die vielen Antworten, es funktioniert soweit alles prächtig, nur bleibt noch eine Frage offen, wie sieht es mit 2 dimensionalen Vektoren aus? <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>
<p>wie man sie deklariert kann ich mir bisschen vorstellen, nur wie greife ich dann mit .at() auf die Elemente zu und wie lösche bzw. erstelle ich neue Container mittels .push_back() ?</p>
<p>p.s. werde versuchen den C style nicht mehr zu benutzen und statt dessen die nativen C++ Bibliotheken nutzen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148559</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Thu, 24 Nov 2011 23:43:14 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Fri, 25 Nov 2011 09:06:14 GMT]]></title><description><![CDATA[<p>Auf verschachtelte Vektoren kannst du mit Iteratoren zugreifen.</p>
<p>Zugriff:</p>
<pre><code class="language-cpp">vector&lt;vector&lt;data&gt; &gt;::iterator itA;  //Iterator definieren
for (itA = A.begin(); itA != A.end(); ++itA) {
  vector&lt;data&gt;::iterator itB;
  for (itB = itA-&gt;begin; itB != itA-&gt;end(); ++itB)
    itB-&gt;member1 = 4; //Hier kann dann auf die Member zugegriffen werden, etc.
}
</code></pre>
<p>EDIT:<br />
Deklaration wären dann z.B.:</p>
<pre><code class="language-cpp">vector&lt;vector&lt;data&gt; &gt; A;
for (int i=0; i&lt;3; ++i) {
  vector&lt;data&gt; B;
  for (int j=0; j&lt;3; ++j)
    B.push_back(data());
  A.push_back(B);
}
</code></pre>
<p>Ist nicht getestet, kann sein dass sich Fehler eingeschlichen haben <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/2148618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148618</guid><dc:creator><![CDATA[mortified_penguin]]></dc:creator><pubDate>Fri, 25 Nov 2011 09:06:14 GMT</pubDate></item><item><title><![CDATA[Reply to Struct on Fri, 25 Nov 2011 13:27:46 GMT]]></title><description><![CDATA[<p>mortified_penguin schrieb:</p>
<blockquote>
<p>Auf verschachtelte Vektoren kannst du mit Iteratoren zugreifen.</p>
</blockquote>
<p>Oder aber mit operator [], was doch wesentlich intuitiver sein dürfte, wenn man auf ein bestimmtes Element zugreifen möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148717</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 25 Nov 2011 13:27:46 GMT</pubDate></item></channel></rss>