<?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[zweidimensionales Array mit Vector STL]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich benötige eine einfache zweidimsionale Matrix für mein Projekt. Hierzu bin ich auf den Link</p>
<p><a href="http://www.c-plusplus.net/forum/39489-full" rel="nofollow">http://www.c-plusplus.net/forum/39489-full</a></p>
<p>gestoßen. Im Studium habe ich die dortige zweite Möglichkeit kennengelernt.</p>
<p>Ich möchte nun die vierte Möglichkeit ausprobieren.</p>
<p>Meine Headerdatei &quot;vektorfunk.h&quot; lautet:</p>
<pre><code>#include &lt;vector&gt;
#include &lt;cstddef&gt; // für size_t
using namespace std;

template&lt;typename T&gt;
void resize2DimVector(vector&lt; vector&lt;T&gt; &gt; &amp; vec, size_t FirstDim, size_t SecDim)
{
    vec.resize( FirstDim );
    for(size_t i = 0; i &lt; FirstDim; ++i)
        vec.resize( SecDim );
}

template&lt;typename T&gt;
const vector&lt; vector&lt;T&gt; &gt; make_2DimVector(size_t FirstDim, size_t SecDim)
{
    vector&lt; vector&lt;T&gt; &gt; vec;
    resize2DimVector( vec, FirstDim, SecDim );
    return vec;
}

template&lt;typename T&gt;
void resize3DimVector(vector&lt; vector&lt; vector&lt;T&gt; &gt; &gt; &amp; vec, size_t FirstDim, size_t SecDim, size_t ThirdDim)
{
    vec.resize( FirstDim );
    for (size_t i = 0; i &lt; FirstDim; ++i)
    {
        vec[i].resize( SecDim );
        for (size_t j = 0; j &lt; SecDim; ++j)
            vec[i][j].resize( ThirdDim );
    }
}

template&lt;typename T&gt;
const vector&lt; vector&lt; vector&lt;T&gt; &gt; &gt; make_3DimVector(size_t FirstDim, size_t SecDim, size_t ThirdDim)
{
    vector&lt; vector&lt; vector&lt;T&gt; &gt; &gt; vec;
    resize3DimVector( vec, FirstDim, SecDim, ThirdDim );
    return vec;
}
</code></pre>
<ul>
<li></li>
</ul>
<p>und ist somit aus der obigen URL 1 zu 1 übernommen worden.</p>
<p>Der Quellcode für meine eigensprogrammierte Klasse &quot;matrix_2d.h&quot; lautet:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstddef&gt; // für size_t
#include &quot;vektorfunk.h&quot;

//using namespace std;
typedef unsigned int uint;

template &lt;typename T&gt;
class matrix_2d{
protected:
	vector&lt; vector&lt;T&gt; &gt; _matrix;
	uint _m;
	uint _n;
	// bool _saved;			// Sind alle Elemente der Matrix gleich 0 ?

public:

	matrix_2d(){													// Konstruktor A
	size_t tmp = 1;
	_matrix = make_2DimVector&lt;T&gt;(tmp, tmp);
	_m = 1;
	_n = 1;
	_matrix[0][0] = 0;						// sichern
	}

	matrix_2d(uint m, uint n){										// Konstruktor B
	_matrix = make_2DimVector&lt;T&gt;( (size_t)m, (size_t)n);
	_m = m;
	_n = n;

	for(uint i = 0; i &lt; _m;i++){			
		for(uint j = 0; j &lt; _n;i++){
			_matrix[i][j] = 0;				// sichern
		}
	}

	}

	void resize(uint m, uint n){										// dimensioniere Matrxi neu
		resize2DimVector( _matrix, (size_t) m, (size_t) n);
		_m = m;
		_n = n;

	for(uint i = 0; i &lt; _m;i++){			
		for(uint j = 0; j &lt; _n;i++){
			_matrix[i][j] = 0;				// sichern
		}
	}

	}

	inline void set(uint m, uint n, T Wert){					// setze Wert
		_matrix[m][n] = Wert;									// keine Modifaktion (1. Element einer Zeile der Matrix ist m == 0)
	}

	inline T get(uint m, uint n){								// gebe Matrixelement aus
		return _matrix[m][n];									// keine Modifaktion (1. Element einer Zeile der Matrix ist m == 0)
	}

	inline uint size_of(uint choice){					
		if(choice == 1)
			return _m;			// Zeilenanzahl
		if(choice == 2)
			return _n;			// Spaltenanzahl

		std::cout &lt;&lt; &quot;Size of Error in class matrix_2d!!&quot; &lt;&lt; endl;	// sollte bei fertiger Programmierung nicht passieren
		int tmp = 0;											// s.o.
		std::cin &gt;&gt; tmp;												// s.o.
		return 0;												// s.o.
	}

};
</code></pre>
<p>Zum Ausprobieren meiner Quelle habe ich folgende Testumgebung geschrieben:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;aushilfe.h&quot;
#include &quot;matrix_2d.h&quot;

using namespace std;

int main(){
cout &lt;&lt; &quot;Start Testprogramm&quot; &lt;&lt; endl;

matrix_2d&lt;double&gt;* A = new matrix_2d&lt;double&gt;;

//matrix_2d&lt;double&gt;* B(unsigned int 2,2);

unsigned int m = 4;
unsigned int n = 4;

A-&gt;resize(m,n);

for(unsigned int u = 0; u &lt; m; u++){
	for(unsigned int h = 0; h &lt; m; h++){
		A-&gt;set(u,h,u+h);
	}
}

	int a = 0;

	cin &gt;&gt; a;

	return 0;
}
</code></pre>
<p>Im Main-Programm stürzt er in Zeile 19 ab:<br />
-&gt; Hier ist er in &quot;matrix_2d.h&quot; @ Zeile 40:<br />
--&gt; In &quot;vektorfunk.h&quot; stürzt der Debugger im letzten Durchlauf der Vorschleife in Zeile 12 ab.</p>
<p>Die Fehlermeldung lautet:</p>
<blockquote>
<p>Debug Assertation Failed!<br />
...<br />
<strong>Expression: vector subscript out of range</strong></p>
</blockquote>
<p>Da bin ich mit meinem Latein am Ende <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>Er stürzt immer im letzten for-schleifen Durchlauf ab. Ich habe bereits im Mainprogramm die Werte von [i]m* und <em>n</em> verändert, doch es hat nicht geholfen.</p>
<p>Ich benutze Visual Studio 2010. Mein Compiler arbeitet im Debug-Modus für x64.</p>
<p>Hoffentlich kann mir einer helfen.</p>
<p>cu</p>
<p>John</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/311270/zweidimensionales-array-mit-vector-stl</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 16:43:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/311270.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Dec 2012 14:09:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to zweidimensionales Array mit Vector STL on Sat, 01 Dec 2012 14:09:35 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich benötige eine einfache zweidimsionale Matrix für mein Projekt. Hierzu bin ich auf den Link</p>
<p><a href="http://www.c-plusplus.net/forum/39489-full" rel="nofollow">http://www.c-plusplus.net/forum/39489-full</a></p>
<p>gestoßen. Im Studium habe ich die dortige zweite Möglichkeit kennengelernt.</p>
<p>Ich möchte nun die vierte Möglichkeit ausprobieren.</p>
<p>Meine Headerdatei &quot;vektorfunk.h&quot; lautet:</p>
<pre><code>#include &lt;vector&gt;
#include &lt;cstddef&gt; // für size_t
using namespace std;

template&lt;typename T&gt;
void resize2DimVector(vector&lt; vector&lt;T&gt; &gt; &amp; vec, size_t FirstDim, size_t SecDim)
{
    vec.resize( FirstDim );
    for(size_t i = 0; i &lt; FirstDim; ++i)
        vec.resize( SecDim );
}

template&lt;typename T&gt;
const vector&lt; vector&lt;T&gt; &gt; make_2DimVector(size_t FirstDim, size_t SecDim)
{
    vector&lt; vector&lt;T&gt; &gt; vec;
    resize2DimVector( vec, FirstDim, SecDim );
    return vec;
}

template&lt;typename T&gt;
void resize3DimVector(vector&lt; vector&lt; vector&lt;T&gt; &gt; &gt; &amp; vec, size_t FirstDim, size_t SecDim, size_t ThirdDim)
{
    vec.resize( FirstDim );
    for (size_t i = 0; i &lt; FirstDim; ++i)
    {
        vec[i].resize( SecDim );
        for (size_t j = 0; j &lt; SecDim; ++j)
            vec[i][j].resize( ThirdDim );
    }
}

template&lt;typename T&gt;
const vector&lt; vector&lt; vector&lt;T&gt; &gt; &gt; make_3DimVector(size_t FirstDim, size_t SecDim, size_t ThirdDim)
{
    vector&lt; vector&lt; vector&lt;T&gt; &gt; &gt; vec;
    resize3DimVector( vec, FirstDim, SecDim, ThirdDim );
    return vec;
}
</code></pre>
<ul>
<li></li>
</ul>
<p>und ist somit aus der obigen URL 1 zu 1 übernommen worden.</p>
<p>Der Quellcode für meine eigensprogrammierte Klasse &quot;matrix_2d.h&quot; lautet:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstddef&gt; // für size_t
#include &quot;vektorfunk.h&quot;

//using namespace std;
typedef unsigned int uint;

template &lt;typename T&gt;
class matrix_2d{
protected:
	vector&lt; vector&lt;T&gt; &gt; _matrix;
	uint _m;
	uint _n;
	// bool _saved;			// Sind alle Elemente der Matrix gleich 0 ?

public:

	matrix_2d(){													// Konstruktor A
	size_t tmp = 1;
	_matrix = make_2DimVector&lt;T&gt;(tmp, tmp);
	_m = 1;
	_n = 1;
	_matrix[0][0] = 0;						// sichern
	}

	matrix_2d(uint m, uint n){										// Konstruktor B
	_matrix = make_2DimVector&lt;T&gt;( (size_t)m, (size_t)n);
	_m = m;
	_n = n;

	for(uint i = 0; i &lt; _m;i++){			
		for(uint j = 0; j &lt; _n;i++){
			_matrix[i][j] = 0;				// sichern
		}
	}

	}

	void resize(uint m, uint n){										// dimensioniere Matrxi neu
		resize2DimVector( _matrix, (size_t) m, (size_t) n);
		_m = m;
		_n = n;

	for(uint i = 0; i &lt; _m;i++){			
		for(uint j = 0; j &lt; _n;i++){
			_matrix[i][j] = 0;				// sichern
		}
	}

	}

	inline void set(uint m, uint n, T Wert){					// setze Wert
		_matrix[m][n] = Wert;									// keine Modifaktion (1. Element einer Zeile der Matrix ist m == 0)
	}

	inline T get(uint m, uint n){								// gebe Matrixelement aus
		return _matrix[m][n];									// keine Modifaktion (1. Element einer Zeile der Matrix ist m == 0)
	}

	inline uint size_of(uint choice){					
		if(choice == 1)
			return _m;			// Zeilenanzahl
		if(choice == 2)
			return _n;			// Spaltenanzahl

		std::cout &lt;&lt; &quot;Size of Error in class matrix_2d!!&quot; &lt;&lt; endl;	// sollte bei fertiger Programmierung nicht passieren
		int tmp = 0;											// s.o.
		std::cin &gt;&gt; tmp;												// s.o.
		return 0;												// s.o.
	}

};
</code></pre>
<p>Zum Ausprobieren meiner Quelle habe ich folgende Testumgebung geschrieben:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;aushilfe.h&quot;
#include &quot;matrix_2d.h&quot;

using namespace std;

int main(){
cout &lt;&lt; &quot;Start Testprogramm&quot; &lt;&lt; endl;

matrix_2d&lt;double&gt;* A = new matrix_2d&lt;double&gt;;

//matrix_2d&lt;double&gt;* B(unsigned int 2,2);

unsigned int m = 4;
unsigned int n = 4;

A-&gt;resize(m,n);

for(unsigned int u = 0; u &lt; m; u++){
	for(unsigned int h = 0; h &lt; m; h++){
		A-&gt;set(u,h,u+h);
	}
}

	int a = 0;

	cin &gt;&gt; a;

	return 0;
}
</code></pre>
<p>Im Main-Programm stürzt er in Zeile 19 ab:<br />
-&gt; Hier ist er in &quot;matrix_2d.h&quot; @ Zeile 40:<br />
--&gt; In &quot;vektorfunk.h&quot; stürzt der Debugger im letzten Durchlauf der Vorschleife in Zeile 12 ab.</p>
<p>Die Fehlermeldung lautet:</p>
<blockquote>
<p>Debug Assertation Failed!<br />
...<br />
<strong>Expression: vector subscript out of range</strong></p>
</blockquote>
<p>Da bin ich mit meinem Latein am Ende <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>Er stürzt immer im letzten for-schleifen Durchlauf ab. Ich habe bereits im Mainprogramm die Werte von [i]m* und <em>n</em> verändert, doch es hat nicht geholfen.</p>
<p>Ich benutze Visual Studio 2010. Mein Compiler arbeitet im Debug-Modus für x64.</p>
<p>Hoffentlich kann mir einer helfen.</p>
<p>cu</p>
<p>John</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2276308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2276308</guid><dc:creator><![CDATA[John_88]]></dc:creator><pubDate>Sat, 01 Dec 2012 14:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to zweidimensionales Array mit Vector STL on Sat, 01 Dec 2012 14:51:51 GMT]]></title><description><![CDATA[<p>Was sieht der geneigte Leser hier in <code>matrix_2d::resize(uint, uint)</code> ?</p>
<pre><code class="language-cpp">for(uint i = 0; i &lt; _m;i++){           
        for(uint j = 0; j &lt; _n;i++){
            _matrix[i][j] = 0;              // sichern
        }
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2276318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2276318</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sat, 01 Dec 2012 14:51:51 GMT</pubDate></item><item><title><![CDATA[Reply to zweidimensionales Array mit Vector STL on Sat, 01 Dec 2012 15:46:40 GMT]]></title><description><![CDATA[<p>Danke Furble Wurble für deine Antwort!</p>
<p>Das ist scheinbar die Lösung gewesen. Ich dachte, dass es an der Funktion resize2DimVector liegt, weil mir hier der Debugger den Fehler ausgegeben hat.</p>
<p>Bei mir hatte der Debugger nie angezeigt, dass er in die Zeile 29 der Datei <em>matrix_2d.h</em> geschafft hat.</p>
<p>cu</p>
<p>John_88</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2276325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2276325</guid><dc:creator><![CDATA[John_88]]></dc:creator><pubDate>Sat, 01 Dec 2012 15:46:40 GMT</pubDate></item></channel></rss>