<?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[2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt;]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hoffe der Topictitel zeigt schon worauf ich hinausmöchte.<br />
Ich möchte ein 2 dimensionales Feld (alles strings) speichern.<br />
Ich würde ja einfach ein 2-Dimensionales Array nehmen, jedoch ist das Problem die unbekannte Menge der Daten. (Ergebnis einer DB-Abfrage)</p>
<p>Nun möchte ich - sofern möglich - gerne einen 2 dimensionalen Standardcontainer benutzen, aber ich habe leider nichts gefunden.</p>
<p>Ich habe mir zwar mit einem Vektor im Vektor beholfen, jedoch gefällt mir diese Lösung ehrlich gesagt gar nicht. Ziemlich unübersichtlich für mich.</p>
<p>Frage: Gibt es da eine elegantere Lösung in C++? (Gerne auch eine Borland 6 c++ builder spezifische Lösung...)</p>
<p>Gruß<br />
R</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178675/2-dimensionales-array-vs-std-vector-lt-std-vector-gt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 00:24:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178675.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Apr 2007 13:09:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt; on Fri, 13 Apr 2007 13:33:22 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hoffe der Topictitel zeigt schon worauf ich hinausmöchte.<br />
Ich möchte ein 2 dimensionales Feld (alles strings) speichern.<br />
Ich würde ja einfach ein 2-Dimensionales Array nehmen, jedoch ist das Problem die unbekannte Menge der Daten. (Ergebnis einer DB-Abfrage)</p>
<p>Nun möchte ich - sofern möglich - gerne einen 2 dimensionalen Standardcontainer benutzen, aber ich habe leider nichts gefunden.</p>
<p>Ich habe mir zwar mit einem Vektor im Vektor beholfen, jedoch gefällt mir diese Lösung ehrlich gesagt gar nicht. Ziemlich unübersichtlich für mich.</p>
<p>Frage: Gibt es da eine elegantere Lösung in C++? (Gerne auch eine Borland 6 c++ builder spezifische Lösung...)</p>
<p>Gruß<br />
R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265312</guid><dc:creator><![CDATA[std**Robin]]></dc:creator><pubDate>Fri, 13 Apr 2007 13:33:22 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt; on Fri, 13 Apr 2007 13:36:14 GMT]]></title><description><![CDATA[<p>Was ist denn daran unübersichtlich? Vector im Vector ist ne gute Lösung. Schreib dir notfalls ne Klasse, die diesen kapselt, und bau dir Methoden, die den Zugriff vereinfachen. Fertig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265344</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 13 Apr 2007 13:36:14 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt; on Fri, 13 Apr 2007 13:40:38 GMT]]></title><description><![CDATA[<p>Hallo Robin,</p>
<p>ich denke die <a href="http://www.boost.org/libs/multi_array/doc/index.html" rel="nofollow">boost multi-arrays</a> sind das was Du brauchst.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265349</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 13 Apr 2007 13:40:38 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt; on Fri, 13 Apr 2007 14:37:15 GMT]]></title><description><![CDATA[<p>std::Robin schrieb:</p>
<blockquote>
<p>... Ich würde ja einfach ein 2-Dimensionales Array nehmen, jedoch ist das Problem die unbekannte Menge der Daten. (Ergebnis einer DB-Abfrage)<br />
R</p>
</blockquote>
<p>Um etwas vorzuschlagen muesste ich mehr wissen. Heisst &quot;unbekannte Menge&quot; das nur die erste Dimension des zweidimensionalen Arrays nicht feststeht,<br />
oder das die zweite Dimension nicht feststeht, oder beide Dimensionen nicht feststehen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265390</guid><dc:creator><![CDATA[gerie]]></dc:creator><pubDate>Fri, 13 Apr 2007 14:37:15 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt; on Fri, 13 Apr 2007 16:26:55 GMT]]></title><description><![CDATA[<p>char a[x][y];</p>
<p>x und y sind unbekannt.<br />
Realisiert werden soll ein Feld welches ich koordinatenartig ansprechen kann.</p>
<p>Ich versuche gerade mich in Boost MultiArrays einzulesen, jedoch tue ich mich mit englisch schwer und das dauert wohl noch etwas.<br />
Einer Quick&amp;Dirty Lösung gegenüber wäre ich auch aufgeschlossen.</p>
<p>Gruß<br />
R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265471</guid><dc:creator><![CDATA[std**Robin]]></dc:creator><pubDate>Fri, 13 Apr 2007 16:26:55 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt; on Fri, 13 Apr 2007 16:37:23 GMT]]></title><description><![CDATA[<p>hmm ..</p>
<pre><code class="language-cpp">char** items = new char*[x];
for (size_t cur = 0; cur &lt; x; ++cur)
    items[cur] = new char[y];

// nutzen ...
items[0][3] = 'a';

// freigeben ...
for (size_t cur = 0; cur &lt; x; ++cur)
    delete [] items[cur];

delete [] items;
</code></pre>
<p>bin mir nciht sicher ob ichs sauber freigegeben hab und ist nicht getestet ... so in etwa is es aber quick&amp;dirty ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265474</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 13 Apr 2007 16:37:23 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt; on Fri, 13 Apr 2007 16:42:30 GMT]]></title><description><![CDATA[<p>wieso nicht wie deiN Threadtitel es sagt?</p>
<p>std::vector&lt;std::vector&lt;char&gt;&gt; a;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265479</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Fri, 13 Apr 2007 16:42:30 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt; on Fri, 13 Apr 2007 17:45:19 GMT]]></title><description><![CDATA[<p>std::Robin schrieb:</p>
<blockquote>
<p>Einer Quick&amp;Dirty Lösung gegenüber wäre ich auch aufgeschlossen.</p>
</blockquote>
<p>std::Robin schrieb:</p>
<blockquote>
<p>die unbekannte Menge der Daten. (Ergebnis einer DB-Abfrage)</p>
</blockquote>
<p>Wenn das so ist so sollte doch der Record der da abgeholt wird bekannt sein, also wurde doch ein</p>
<pre><code class="language-cpp">std::vector&lt; Record &gt;
</code></pre>
<p>reichen. Ein Record hat dann die Struktur</p>
<pre><code class="language-cpp">struct Record
{
    int m_datum1;
    egal_type m_datum 2;
    // usw.
};
</code></pre>
<p>oder wo kommt die zweite Dimension her?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265538</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 13 Apr 2007 17:45:19 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Array vs std::vector&amp;lt;std::vector&amp;gt; on Fri, 13 Apr 2007 17:50:46 GMT]]></title><description><![CDATA[<p>gegen vector&lt; vector&lt; T &gt; &gt; ist nicht unbedingt etwas einzuwenden, solange du nur über Koordinaten navigierst. Eine andere Methode verwendet valarray mit slice - aber auch dafür muss man sich erst etwas einlesen. Eine selbstgeschrieben Klasse tut es auch:</p>
<pre><code class="language-cpp">template&lt;typename T, typename A = std::allocator&lt; T &gt; &gt;
class Array2D
{
public:
    typedef A allocator_type;
    typedef typename allocator_type::value_type value_type;
    typedef typename allocator_type::size_type size_type;
    typedef typename allocator_type::difference_type difference_type;
    typedef typename allocator_type::pointer pointer;
    typedef typename allocator_type::const_pointer const_pointer;
    typedef typename allocator_type::reference reference;
    typedef typename allocator_type::const_reference const_reference;

    typedef pointer iterator;
    typedef const_pointer const_iterator;
    explicit Array2D(size_type x = 0, size_type y = 0, const_reference value = value_type())
        : x_( x ), y_( y ), p_( A().allocate( x * y ) )
    {
        try
        {
            std::uninitialized_fill( begin(), end(), value );
        }
        catch ( ... )
        {
            A().deallocate( begin(), size() );
            throw;
        }
    }
    Array2D(const Array2D&amp; other)
        : x_( other.x_dim() ), y_( other.y_dim() ), p_( A().allocate( other.size() ) )
    {
        try
        {
            std::uninitialized_copy( other.begin(), other.end(), begin() );
        }
        catch ( ... )
        {
            A().deallocate( begin(), size() );
            throw;
        }
    }
    ~Array2D()
    {
        allocator_type allocator;
        for ( iterator p = end(); p != begin(); )
            allocator.destroy( --p );
        allocator.deallocate( p_, size() );
    }
    Array2D&amp; operator=(const Array2D&amp; rhs)
    {
        Array2D( rhs ).swap( *this );
        return *this;
    }
    void swap(Array2D&amp; other)
    {
        using std::swap;
        swap( x_, other.x_ );
        swap( y_, other.y_ );
        swap( p_, other.p_ );
    }
    size_type x_dim() const { return x_; }
    size_type y_dim() const { return y_; }
    size_type size()  const { return x_dim() * y_dim(); }
    iterator       begin()       { return p_; }
    const_iterator begin() const { return p_; }
    iterator       end()         { return begin() + size(); }
    const_iterator end()   const { return begin() + size(); }

    pointer operator[](size_type x) { return p_ + x * y_dim(); }
    const_pointer operator[](size_type x) const { return p_ + x * y_dim(); }

    reference operator()(size_type x, size_type y) { return p_[ x * y_dim() + y ]; }
    const_reference operator()(size_type x, size_type y) const { return p_[ x * y_dim() + y ]; }
private:
    size_type x_;
    size_type y_;
    pointer p_;
};

template&lt;typename T, typename A&gt;
void swap(Array2D&lt; T, A &gt;&amp; lhs, Array2D&lt; T, A &gt;&amp; rhs)
{
    lhs.swap( rhs );
}
</code></pre>
<p>hier fehlt ein bisschen Funktionalität (z.B. resize und assign). Zuviel davon rückt das ganze dann allerdings wieder sehr nahe an existierende Varianten (insbesondere valarray) heran, dann lohnt sich eine eigene Klasse schon wieder nicht. Es hängt eben sehr vom Verwendungszweck ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265543</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 13 Apr 2007 17:50:46 GMT</pubDate></item></channel></rss>