<?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[Mehrdimensionaler Vector in einer Klasse]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche verzweifelt, in einer Klasse einen 4-dimensionalen std::Vektor<br />
zu erstellen. Mein Code:<br />
physik.cpp:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

using namespace std;

class physik
{
  private:
//eigentlich wollte ich hier gleich die größe des vectors festlegen:
// vector&lt;vector&lt;vector&lt;vector&lt;int&gt; &gt; &gt; &gt; bixel_map(6, vector&lt; vector&lt;vector&lt;int&gt; &gt; &gt; (36, vector&lt;vector&lt;int&gt; &gt;(36,vector&lt;int&gt;(2))) );
//Deswegen erstmal:
  vector&lt;vector&lt;vector&lt;vector&lt;int&gt; &gt; &gt; &gt; bixel_map;

  public:
    void load_ker(char*);
};
</code></pre>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;
#include &quot;physik.cpp&quot;
using namespace std;

int main()
{
char* s3=&quot;daten.txt&quot;;
physik physik;
physik.load_ker(s3);
} 

void physik::load_ker(char* roi){
//hier werden die werte von int b,x,y,anz,start bestimmt
//und sollen jetzt in bixel_map gespeichert werden:
//b=0..5, x=1..36, y=1..36
                bixel_map.reserve(6*36*36*2); //anzahl der möglichen elemente
      		bixel_map[b][x][y][0]=start;
      		bixel_map[b][x][y][1]=start+anz-1;
}
</code></pre>
<p>Dummerweise bekomme ich so immer einen &quot;Segmentation fault&quot;.<br />
Wo liegt mein Fehler? Gibt es eine bessere Möglichkeit, die<br />
Dimension von mehrdimensionalen Vectoren innerhalb einer Klasse<br />
festzulegen?</p>
<p>Vielen Dank schonmal,<br />
Moritz</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227204/mehrdimensionaler-vector-in-einer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 04:03:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227204.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Nov 2008 13:53:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrdimensionaler Vector in einer Klasse on Wed, 12 Nov 2008 13:53:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche verzweifelt, in einer Klasse einen 4-dimensionalen std::Vektor<br />
zu erstellen. Mein Code:<br />
physik.cpp:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

using namespace std;

class physik
{
  private:
//eigentlich wollte ich hier gleich die größe des vectors festlegen:
// vector&lt;vector&lt;vector&lt;vector&lt;int&gt; &gt; &gt; &gt; bixel_map(6, vector&lt; vector&lt;vector&lt;int&gt; &gt; &gt; (36, vector&lt;vector&lt;int&gt; &gt;(36,vector&lt;int&gt;(2))) );
//Deswegen erstmal:
  vector&lt;vector&lt;vector&lt;vector&lt;int&gt; &gt; &gt; &gt; bixel_map;

  public:
    void load_ker(char*);
};
</code></pre>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;
#include &quot;physik.cpp&quot;
using namespace std;

int main()
{
char* s3=&quot;daten.txt&quot;;
physik physik;
physik.load_ker(s3);
} 

void physik::load_ker(char* roi){
//hier werden die werte von int b,x,y,anz,start bestimmt
//und sollen jetzt in bixel_map gespeichert werden:
//b=0..5, x=1..36, y=1..36
                bixel_map.reserve(6*36*36*2); //anzahl der möglichen elemente
      		bixel_map[b][x][y][0]=start;
      		bixel_map[b][x][y][1]=start+anz-1;
}
</code></pre>
<p>Dummerweise bekomme ich so immer einen &quot;Segmentation fault&quot;.<br />
Wo liegt mein Fehler? Gibt es eine bessere Möglichkeit, die<br />
Dimension von mehrdimensionalen Vectoren innerhalb einer Klasse<br />
festzulegen?</p>
<p>Vielen Dank schonmal,<br />
Moritz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613589</guid><dc:creator><![CDATA[mowo*fs*]]></dc:creator><pubDate>Wed, 12 Nov 2008 13:53:55 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionaler Vector in einer Klasse on Wed, 12 Nov 2008 14:05:37 GMT]]></title><description><![CDATA[<p>Erstens mal führt <code>reserve()</code> nur dazu, dass die Kapazität des Vectors sicher genügend gross ist, um spätere Reallokationen zu vermeiden. Die Elemente werden nicht initialisiert. Vielleicht meinst du <code>resize()</code> .</p>
<p>Zweitens gibst du als Argument <code>6*36*36*2</code> an; ich denke nicht, dass das gewollt ist. Die erste Dimension des Vectors soll wahrscheinlich 6, die zweite 36 etc. haben - dann musst du das auch so machen. Also mit verschachtelten For-Schleifen und <code>resize()-</code> Aufrufen. Oder du gibst die Grösse im Konstruktor des Vektors (also Initialisierungsliste des Klassenkonstruktors) an.</p>
<p>Aber benötigst du wirklich einen vierdimensionalen Vector? Das kann ziemlich mühsam werden... Meinst du nicht, du könntest gewisse Eigenschaften in eine Klasse zusammenpacken? Ansonsten gibts auch noch <em>Boost.MultiArray</em>, das ist aber so viel ich weiss nicht sehr einfach zu handhaben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613593</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 12 Nov 2008 14:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionaler Vector in einer Klasse on Wed, 12 Nov 2008 14:45:41 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort!<br />
Mit den Dimensionen hast du recht.<br />
Was ich brauche ist ein start und stop Wert in Abhängigkeit von b,x und y.<br />
Da erscheint mir der 4-dim Vector als ei.fachste Lösung.<br />
vector[b][x][y][0]=startwert<br />
vector[b][x][y][1]=stopwert</p>
<p>Wie funktioniert das denn mit den verschachtelten For-Schleifen und resize()?</p>
<p>Zwischenzeitlich hab ich folgendes versucht:<br />
Ich erzeuge den vector direkt mit den richtigen Dimensionen in load_ker:</p>
<pre><code class="language-cpp">oid physik::load_ker(char* roi){
//hier werden die werte von int b,x,y,anz,start bestimmt
//und sollen jetzt in bixel_map gespeichert werden:
//b=0..5, x=1..36, y=1..36
vector&lt; vector&lt; vector &lt;vector&lt;int&gt; &gt; &gt; &gt; bixel_map_speicher(6, vector &lt;vector &lt;  vector&lt;int&gt; &gt; &gt; (36, vector &lt;vector&lt;int&gt; &gt;(4,vector&lt;int&gt;(2,0))) );             
              bixel_map_speicher[b][x][y][0]=start;
              bixel_map_speicher[b][x][y][1]=start+anz-1;
}
</code></pre>
<p>Aber auch dieser Versuch endet mit einem Segmentation Fault.<br />
Hätte das funktioniert, hätte ich versucht, den vector mit<br />
bixel_map=bixel_map_speicher zu kopieren. Aber soweit kam es ja nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613603</guid><dc:creator><![CDATA[mowo*fs*]]></dc:creator><pubDate>Wed, 12 Nov 2008 14:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionaler Vector in einer Klasse on Wed, 12 Nov 2008 16:11:04 GMT]]></title><description><![CDATA[<p>Also als erstes würde ich mal ein Struct (oder gleich eine Klasse) für den Start- und Stoppwert machen:</p>
<pre><code class="language-cpp">struct Value // vielleicht hast du ja einen besseren Namen ;)
{
    int Start;
    int Stop;
    Value() : Start(1), Stop(3) {} // für gültige Initialisierung
};
</code></pre>
<p>Lokal würde das so aussehen.</p>
<pre><code class="language-cpp">const unsigned int MaxB = 6;
const unsigned int MaxX = 36;
const unsigned int MaxY = 4;
typedef std::vector&lt;std::vector&lt;std::vector&lt;Value&gt; &gt; &gt; Container3D;
Container3D Vec(MaxB, std::vector&lt;std::vector&lt;Value&gt; &gt;(MaxX, std::vector&lt;Value&gt;(MaxY, Value())));
</code></pre>
<p>Aber ich würde das besser gleich in der Initialisierungsliste des Konstruktors erledigen:</p>
<pre><code class="language-cpp">physik::physik()
: bixel_map(MaxB, std::vector&lt;std::vector&lt;Value&gt; &gt;(MaxX, std::vector&lt;Value&gt;(MaxY, Value()))
{

}
</code></pre>
<p>Das <code>typedef</code> kannst du trotzdem in der Klasse (auf Member-Ebene) deklarieren, um den Typ schnell schreiben zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613648</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 12 Nov 2008 16:11:04 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionaler Vector in einer Klasse on Thu, 13 Nov 2008 07:33:01 GMT]]></title><description><![CDATA[<p>Ah, danke. So werd ichs machen.</p>
<p>Aber nur der Neugier wegen: Wie würde mans jetzt mit dem 4D-Vector machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613845</guid><dc:creator><![CDATA[mowo*fs*]]></dc:creator><pubDate>Thu, 13 Nov 2008 07:33:01 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionaler Vector in einer Klasse on Thu, 13 Nov 2008 08:07:59 GMT]]></title><description><![CDATA[<p>mowo(fs) schrieb:</p>
<blockquote>
<p>Ah, danke. So werd ichs machen.</p>
<p>Aber nur der Neugier wegen: Wie würde mans jetzt mit dem 4D-Vector machen?</p>
</blockquote>
<p>Genau gleich, wie bei 3D, einfach nochmal eine Ebene tiefer..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613870</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 13 Nov 2008 08:07:59 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionaler Vector in einer Klasse on Thu, 13 Nov 2008 11:08:52 GMT]]></title><description><![CDATA[<p>schon klar... aber das hat ja nicht funktioniert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613995</guid><dc:creator><![CDATA[mowo*fs*]]></dc:creator><pubDate>Thu, 13 Nov 2008 11:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionaler Vector in einer Klasse on Thu, 13 Nov 2008 11:18:50 GMT]]></title><description><![CDATA[<p>mowo(fs) schrieb:</p>
<blockquote>
<p>schon klar... aber das hat ja nicht funktioniert...</p>
</blockquote>
<p>Funktioniert nicht gibts nicht..</p>
<p>Zeit mal Code her, wo du das bekommst. Du greifst wahrscheinlich einfach auf ungültigen Bereich zu..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614000</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 13 Nov 2008 11:18:50 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionaler Vector in einer Klasse on Thu, 13 Nov 2008 18:23:12 GMT]]></title><description><![CDATA[<p>Wenn du mein oberes Beispiel verstanden hast, sollte dir auch die Vorgehensweise bei einem vierdimensionalen Vektor klar sein. Ansonsten frag nach, was du noch nicht verstanden hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614302</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 13 Nov 2008 18:23:12 GMT</pubDate></item></channel></rss>