<?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[Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot;]]></title><description><![CDATA[<p>Hi,</p>
<p>eine Frage kann man dem Anwender soviele zB. Zahlen/Zeichen in einen Array eingeben lassen und danach wird dann die Größe des array &quot;festgelegt&quot;?<br />
Kann man das mit dynamischer Speicherreservierung realisieren?<br />
Wenn ja, kann mir da einer ein kleines Beispiel dazu schreiben? Wäre echt nice.</p>
<p>Danke<br />
MfG Gustl</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/225330/eingabe-und-danach-größe-des-arrays-quot-festlegen-quot</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 12:55:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/225330.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 22 Oct 2008 10:27:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 10:27:51 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>eine Frage kann man dem Anwender soviele zB. Zahlen/Zeichen in einen Array eingeben lassen und danach wird dann die Größe des array &quot;festgelegt&quot;?<br />
Kann man das mit dynamischer Speicherreservierung realisieren?<br />
Wenn ja, kann mir da einer ein kleines Beispiel dazu schreiben? Wäre echt nice.</p>
<p>Danke<br />
MfG Gustl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602736</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Wed, 22 Oct 2008 10:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 10:32:17 GMT]]></title><description><![CDATA[<p>Stichwort:</p>
<pre><code class="language-cpp">vector&lt;Struktur&gt; XY;
Struktur Test;
// Daten eingeben und in Test speichern

//
XY.push_back( Test );
</code></pre>
<p>Liest Daten ein in die Variable Test und hängt diese hinten an XY dran.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602740</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 22 Oct 2008 10:32:17 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 10:42:51 GMT]]></title><description><![CDATA[<p>Und vielleicht noch als Ergänzung:<br />
<a href="http://www.cplusplus.com/reference/stl/" rel="nofollow">http://www.cplusplus.com/reference/stl/</a></p>
<p>Da hast du die Referenz zu den verschiedenen Container der Standardbibliothek.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602744</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 22 Oct 2008 10:42:51 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 10:48:14 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>eine Frage kann man dem Anwender soviele zB. Zahlen/Zeichen in einen Array eingeben lassen und danach wird dann die Größe des array &quot;festgelegt&quot;?<br />
Kann man das mit dynamischer Speicherreservierung realisieren?<br />
Wenn ja, kann mir da einer ein kleines Beispiel dazu schreiben? Wäre echt nice.</p>
</blockquote>
<p>Hallo Gustl,</p>
<p>verwende die Container der STL, das ist viel einfacher als selbst eine dynamische Speicherreservierung zu basteln. Etwa so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt; // Container mit dynamischer Speicherreservierung

int main()
{
    using namespace std;
    std::vector&lt; int &gt; zahlen;  

    cout &lt;&lt; &quot;Gib soviel Zahlen ein wie Du willst; beende die Eingabe mit einem x&quot; &lt;&lt; endl;
    for( int zahl; cin &gt;&gt; zahl; )
        zahlen.push_back( zahl ); // hier drin passiert die dynamische Speicherreservierung automatisch

    cin.clear();
    cin.ignore( 9999, '\n' );   // Rest der Zeile ignorieren
    cout &lt;&lt; &quot;Danke fuer &quot; &lt;&lt; zahlen.size() &lt;&lt; &quot; Zahlen&quot; &lt;&lt; endl;

    // --   hier liegen 'zahlen.size()' Zahlen in 'zahlen' vor

    return 0;
} // am Ende des Scopes von vector&lt;&gt; wird der Speicher wieder automatisch freigegeben
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602747</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Wed, 22 Oct 2008 10:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 10:57:32 GMT]]></title><description><![CDATA[<p>Danke euch, aber leider wollte ich wissen was im push_back() so abläuft.<br />
Also genau wie die dynamische Speicherverwaltung hier abläuft.</p>
<p>Aber es funktioniert. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1602753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602753</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Wed, 22 Oct 2008 10:57:32 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 11:36:10 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>Danke euch, aber leider wollte ich wissen was im push_back() so abläuft.<br />
Also genau wie die dynamische Speicherverwaltung hier abläuft.</p>
</blockquote>
<p>Dann wäre vielleicht dieser Artikel für dich noch interessant:<br />
<a href="http://magazin.c-plusplus.net/artikel/Aufbau%20der%20STL%20-%20Teil%201%3A%20Container" rel="nofollow">http://magazin.c-plusplus.net/artikel/Aufbau der STL - Teil 1%3A Container</a></p>
<p>Die anderen zwei sind durchaus auch empfehlenswert zum lesen:<br />
<a href="http://magazin.c-plusplus.net/artikel/Aufbau%20der%20STL%20-%20Teil%202%3A%20Iteratoren%20und%20Algorithmen" rel="nofollow">http://magazin.c-plusplus.net/artikel/Aufbau der STL - Teil 2%3A Iteratoren und Algorithmen</a><br />
<a href="http://magazin.c-plusplus.net/artikel/Aufbau%20der%20STL%20-%20Teil%203%3A%20Hilfsklassen%20und%20Erweiterungen" rel="nofollow">http://magazin.c-plusplus.net/artikel/Aufbau der STL - Teil 3%3A Hilfsklassen und Erweiterungen</a></p>
<p>Oder willst du es noch genauer wissen? Dann wird das etwas kompliziert, hier so schnell mal zu erklären. Man sollte aber eigentlich genügend Informationen über solche Dinge in den guten C++ Büchern bekommen oder einem guten Buch über die C++ Standardbibliothek.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602768</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 22 Oct 2008 11:36:10 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 11:51:18 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>Danke euch, aber leider wollte ich wissen was im push_back() so abläuft.<br />
Also genau wie die dynamische Speicherverwaltung hier abläuft.</p>
</blockquote>
<p>Vereinfacht dargestellt:<br />
Der Vector alloziert anfangs ein Array mit einer gewissen Anzahl von Elmenten. Falls beim push_back außerhalb des Bereiches geschrieben werden würde, wird ein größeres Array (z.B. bisherige Größe * 2) alloziert, der Inhalt umkopiert, und anschließend das alte Array gelöscht (Einer der Gründe warum push_back den iterator ungültig machen kann, da dieser noch auf den alten Bereich zeigen würde).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602776</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 22 Oct 2008 11:51:18 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 12:15:24 GMT]]></title><description><![CDATA[<p>Ah ok, ich dachte es geht auch ohne kopieren des &quot;alten&quot; zu kleinen arrays in ein neues. Aber wohl nicht, alles klar danke euch.</p>
<p>MfG Gustl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602807</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Wed, 22 Oct 2008 12:15:24 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 12:27:10 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>Ah ok, ich dachte es geht auch ohne kopieren des &quot;alten&quot; zu kleinen arrays in ein neues. Aber wohl nicht, alles klar danke euch.</p>
</blockquote>
<p>Kann es ja gar nicht, weil <code>std::vector</code> intern immer einen zusammenhängenden Speicherbereich (Array) verwaltet. Wenn dieser zu klein wird, muss eben ein neuer gesucht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602822</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 22 Oct 2008 12:27:10 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 12:37:32 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>Ah ok, ich dachte es geht auch ohne kopieren des &quot;alten&quot; zu kleinen arrays in ein neues. Aber wohl nicht, alles klar danke euch.</p>
</blockquote>
<p>Man kann Arrays nicht vergrößern. Das ist auch relativ logisch, da die Elemente im Speicher direkt hintereinander liegen, und man nicht davon ausgehen kann das der Speicherbereich dahinter nicht bereits belegt ist.</p>
<p>Wenn dies zu Performanceproblemen führt muss man abwägen ob andere Container besser geeignet sind (Eine dynamische Liste z.B. arbeitet ohne zusammenhängenden Speicher, dafür ist der Zugriff langsamer...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602837</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 22 Oct 2008 12:37:32 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 13:18:19 GMT]]></title><description><![CDATA[<p>Du kannst aber, bevor du ihn füllst, eine bestimmte Menge an Platz reservieren. So du diesen Platz beim Füllen nicht überschreitest, wird auch nichts umkopiert. (Stichwort .reserve(int)).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1602862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1602862</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 22 Oct 2008 13:18:19 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Wed, 22 Oct 2008 18:22:31 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>Danke euch, aber leider wollte ich wissen was im push_back() so abläuft.<br />
Also genau wie die dynamische Speicherverwaltung hier abläuft.</p>
</blockquote>
<p>Hallo Gustl,</p>
<p>ich hatte in meiner Bastelkiste noch einen vector-Light gefunden; da kannst Du sehen, wie die Methode push_back funktioniert.</p>
<p>Folgenden Code kannst Du mit zu dem von mir gepostete Programm hinzufügen und in Zeile 7 schreibst Du:</p>
<pre><code class="language-cpp">gustl::vector&lt; int &gt; zahlen;
</code></pre>
<p>dann sollte alles wieder wie vorher funktionieren. Hier der Code:</p>
<pre><code class="language-cpp">#include &lt;cstddef&gt;  // std::size_t
#include &lt;cassert&gt;

namespace gustl
{
    template&lt; typename T &gt;
    class vector
    {
    public:
        typedef std::size_t size_type;
        typedef T value_type;
        typedef T&amp; reference;
        typedef const T&amp; const_reference;
        typedef T* iterator;

        vector() : m_first(0), m_last(0), m_end(0) {}
        ~vector() { clear(); }

        void push_back( const T&amp; x )
        {
            if( !m_first || m_last == m_end )  // falls nicht genug Platz ..
                grow();                        //  .. Speicher vergrößern
            new( m_last ) T( x );              // placement new legt Objekt im Speicher ab
            ++m_last;
        }

        size_type size() const { return m_first? m_last - m_first: 0; }
        bool empty() const { return !m_first; }

        void clear()
        {
            for( T* p = m_first; p != m_last; ++p )
                p-&gt;~T();                // Objekte löschen
            operator delete( m_first ); // Speicher freigeben
            m_first = 0;
        }

        T&amp; operator[]( size_type i )
        {
            assert( i &lt; size() );
            return *(m_first + i);
        }

        iterator begin() { return m_first; }
        iterator end() { return m_first? m_last: 0; }

    private:
        // --   exceptionsicheres Anwachsenlassen des Speichers
        void grow()
        {
            const size_type new_size = m_first? 2*size(): 1;
            if( !m_first ) m_last = 0;
            // neuen größeren Speicher besorgen
            T* const first = static_cast&lt; T* &gt;( operator new( sizeof(T) * new_size ) );
            T* last = first;
            try
            {   // vorhanden Objekte in neuen Speicher kopieren
                for( T* src = m_first; src != m_last; ++last, ++src )
                    new( last ) T( *src );  // Placement new legt das Objekt in den Speicher
            }
            catch( ... )
            {   // es ist ein Fehler aufgetreten =&gt; bereits kopierte Objekte wieder löschen
                for( T* del = first; del != last; ++del )
                    del-&gt;~T();
                operator delete( first );   // neuen Speicher wieder freigeben
                throw;                      // Exception weitergeben; Zustand von vector&lt;&gt; ist unverändert
            }
            clear();                        // bisherigen Kram löschen

            m_first = first;
            m_last = last;
            m_end = m_first + new_size;
        }

        // --   Kopieren ist nicht implementiert
        vector( const vector&amp; );
        vector&amp; operator=( const vector&amp; );

        // -- Member
        T* m_first;             // der Anfang
        T* m_last;              // hinter das letzte Objekt im Speicher
        T* m_end;               // hinter das Ende des Speichers
    };
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603026</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 22 Oct 2008 18:22:31 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe und danach größe des arrays &amp;quot;festlegen&amp;quot; on Thu, 23 Oct 2008 07:26:15 GMT]]></title><description><![CDATA[<p>Echt klasse, dank dir. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1603194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603194</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Thu, 23 Oct 2008 07:26:15 GMT</pubDate></item></channel></rss>