<?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[STL-Container - Vector]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Ich will hier ein kleines Programm schreiben, dass mir den Mittelwert von Werten berechnet, welche der Benutzer eingeben muss. Nun benutze ich &quot;vector&quot;. Der sollte sich ja eigentlich dynamisch zur Laufzeit vergrößern, wenn mehr Werte eingegeben werden, als bei der Initialisierung angegeben worden sind. Wenn ich mein noch nicht ganz fertiges Programm laufen lasse, dann funktioniert alles bis zum zehnten Wert Einwandfrei, wenn man aber den 11. Wert eingibt schmeißt mir das Programm einen Fehler. Ich weiß aber leider nicht warum...</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;vector&gt;
using namespace std;

int main()
{
	int anzahl = 0, i = 0, c = 0;
	vector&lt;double&gt; wert(10);

	cout &lt;&lt; &quot;Mittelwert-Berechnung&quot; &lt;&lt; endl &lt;&lt; endl;

	do
	{
		cout &lt;&lt; i+1 &lt;&lt; &quot;. Wert angeben: &quot;;

		c = cin.peek();
		if(c != 'e')
		{
			cin &gt;&gt; wert[i];
			char cend = cin.get();
			i++;
		}
	}
	while(c != 'e');

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/287604/stl-container-vector</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 08:44:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287604.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 May 2011 16:15:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:15:30 GMT]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Ich will hier ein kleines Programm schreiben, dass mir den Mittelwert von Werten berechnet, welche der Benutzer eingeben muss. Nun benutze ich &quot;vector&quot;. Der sollte sich ja eigentlich dynamisch zur Laufzeit vergrößern, wenn mehr Werte eingegeben werden, als bei der Initialisierung angegeben worden sind. Wenn ich mein noch nicht ganz fertiges Programm laufen lasse, dann funktioniert alles bis zum zehnten Wert Einwandfrei, wenn man aber den 11. Wert eingibt schmeißt mir das Programm einen Fehler. Ich weiß aber leider nicht warum...</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;vector&gt;
using namespace std;

int main()
{
	int anzahl = 0, i = 0, c = 0;
	vector&lt;double&gt; wert(10);

	cout &lt;&lt; &quot;Mittelwert-Berechnung&quot; &lt;&lt; endl &lt;&lt; endl;

	do
	{
		cout &lt;&lt; i+1 &lt;&lt; &quot;. Wert angeben: &quot;;

		c = cin.peek();
		if(c != 'e')
		{
			cin &gt;&gt; wert[i];
			char cend = cin.get();
			i++;
		}
	}
	while(c != 'e');

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071560</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Tue, 31 May 2011 16:15:30 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:20:13 GMT]]></title><description><![CDATA[<p>Der vector vergrößert sich nur, wenn du explizit durch ein push_back etwas anhängst. Mit dem Array-Operator können keine Elemente hinzugefügt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071564</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 31 May 2011 16:20:13 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:20:59 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Nun benutze ich &quot;vector&quot;. Der sollte sich ja eigentlich dynamisch zur Laufzeit vergrößern, wenn mehr Werte eingegeben werden, als bei der Initialisierung angegeben worden sind.</p>
</blockquote>
<p>Wie jeder andere Container vergrößert sich ein vector dann, wenn du Elemente audrücklich einfügst. Bei einem Zugriff auf ein ganz bestimmtes Element ist es hingegen deine Aufgabe dafür zu sorgen, dass dieses Element überhaupt existiert.<br />
Anstatt also dem vector eine bestimmte Anfangsgröße zu geben, solltest du ihn zunächst einmal leer lassen und dann mit jeder Eingabe ein Element hinzufügen (push_back).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071566</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 31 May 2011 16:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:22:10 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Der vector vergrößert sich nur, wenn du explizit durch ein push_back etwas anhängst.</p>
</blockquote>
<p>Genau gesagt erzeugt dein Code undefiniertes Verhalten. Der Feldoperator liest/schreibt ohne eine Bereichsprüfung. Nutze <code>vector::resize</code> oder <code>vector::push_back</code> um ihn zu vergrössern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071567</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Tue, 31 May 2011 16:22:10 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:22:23 GMT]]></title><description><![CDATA[<p>Wie soll man das dann machen? Muss ich dann quasi die zehn Iterationen der do-while-Schleife abzählen und dann das push_back ausführen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071568</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Tue, 31 May 2011 16:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:23:59 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Wie soll man das dann machen? Muss ich dann quasi die zehn Iterationen der do-while-Schleife abzählen und dann das push_back ausführen?</p>
</blockquote>
<p>Warum fängst du denn überhaupt mit 10 Elementen an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071571</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 31 May 2011 16:23:59 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:24:41 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Wie soll man das dann machen?</p>
</blockquote>
<p>Statt <code>cin &gt;&gt; wert[i];</code> schreibst du einfach:</p>
<pre><code class="language-cpp">int Temp;
cin &gt;&gt; Temp;
wert.push_back(Temp);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071572</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Tue, 31 May 2011 16:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:24:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">vector&lt;double&gt; werte;
...

do
...

int einzelwert;
cin &gt;&gt; einzelwert;
werte.push_back( einzelwert );
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071573</guid><dc:creator><![CDATA[asdfasdasd]]></dc:creator><pubDate>Tue, 31 May 2011 16:24:52 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:25:17 GMT]]></title><description><![CDATA[<p>Nein, du liest den Wert innerhalb der Schleife in eine Variable ein und wirfst diese dann per push_back() in den vector&lt;&gt;</p>
<pre><code class="language-cpp">double wert;
cin&gt;&gt;wert;
werte.push_back(wert);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071575</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 31 May 2011 16:25:17 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:31:13 GMT]]></title><description><![CDATA[<p>Hm, soweit funktioniert das jetzt. Nun möchte ich noch eine Funktion schreiben, die mir den Mittelwert berechnet. Wie übergebe ich nun am besten den Vector an die Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071581</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Tue, 31 May 2011 16:31:13 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:33:13 GMT]]></title><description><![CDATA[<p>Am besten als const-Ref.</p>
<p>Aber wieso selber schreiben - die einfachste Lösung wäre std::accumulate()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071583</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 31 May 2011 16:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:35:35 GMT]]></title><description><![CDATA[<p>In meinem C++-Buch finde ich leider keine Informationen zu accumulate()...</p>
<p>Kannst du mir noch ein bisschen draufhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071585</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Tue, 31 May 2011 16:35:35 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:36:07 GMT]]></title><description><![CDATA[<p><a href="http://cplusplus.com/reference/std/numeric/accumulate/" rel="nofollow">http://cplusplus.com/reference/std/numeric/accumulate/</a><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071586</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Tue, 31 May 2011 16:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:36:20 GMT]]></title><description><![CDATA[<p>google und die referenzen sind dein Freund:</p>
<p><a href="http://www.sgi.com/tech/stl/accumulate.html" rel="nofollow">http://www.sgi.com/tech/stl/accumulate.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071587</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 31 May 2011 16:36:20 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:39:48 GMT]]></title><description><![CDATA[<p>Den Vector mit Zeigern oder mit einer der Standardmethoden an dei Funktion übergeben ist wohl nicht möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071590</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Tue, 31 May 2011 16:39:48 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:41:02 GMT]]></title><description><![CDATA[<p>vector::begin() und vector::end() <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071594</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 31 May 2011 16:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:41:43 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Den Vector mit Zeigern oder mit einer der Standardmethoden an dei Funktion übergeben ist wohl nicht möglich?</p>
</blockquote>
<p>Klar ist es möglich, aber ist nicht sinnvoll (Übergabe als Kopie wird recht aufwendig wenn der vector&lt;&gt; größer wird, Übergabe als Pointer ist ein Relikt aus C-Zeiten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071596</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 31 May 2011 16:41:43 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:46:43 GMT]]></title><description><![CDATA[<p>Hm, gut. Dann ist hier wohl das an eine Funktion übergeben wohl wirklich nicht so der bringer.</p>
<p>Aber: Ich verstehe irgendwie nicht, dass C++ hier quasi &quot;verweigert&quot;, bzw. es anscheinend sehr schwer macht den Vector an eine Funktion zu übergeben und in der dann den Vector mit einer for-Schleife auslesen und dann eben die Werte aufaddieren und durch 2 zu teilen.</p>
<p>So, wie ich das verstanden habe, benötige ich ja für accumulate() auch noch Iteratore von denen ich widerum (noch) nicht weiß wie das gehen soll...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071603</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Tue, 31 May 2011 16:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 16:53:42 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Hm, gut. Dann ist hier wohl das an eine Funktion übergeben wohl wirklich nicht so der bringer.</p>
<p>Aber: Ich verstehe irgendwie nicht, dass C++ hier quasi &quot;verweigert&quot;, bzw. es anscheinend sehr schwer macht den Vector an eine Funktion zu übergeben und in der dann den Vector mit einer for-Schleife auslesen und dann eben die Werte aufaddieren und durch 2 zu teilen.</p>
</blockquote>
<p>Was heißt hier &quot;verweigert&quot;? Es ist möglich, vector&lt;&gt;en zu kopieren, du mußt nur damit rechnen, daß dort eine ganze Menge Daten zusammenkommt. Deshalb verwendet man da lieber eine (const) Referenz.</p>
<blockquote>
<p>So, wie ich das verstanden habe, benötige ich ja für accumulate() auch noch Iteratore von denen ich widerum (noch) nicht weiß wie das gehen soll...</p>
</blockquote>
<p>Iteratoren sind eine Abstraktion, damit die Algorithmen nicht für jeden Container neu angepasst werden müssen (außerdem kannst du mit ihnen auch blanke Arrays oder Teilbereiche deines Containers beschreiben). Und die STL-Containerklassen bieten die Methoden begin() und end(), um Iteratoren für alle Elemente zu ermitteln:</p>
<pre><code class="language-cpp">double mv = accumulate(werte.begin(),werte.end(),0.0) / werte.size();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071605</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 31 May 2011 16:53:42 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 17:03:23 GMT]]></title><description><![CDATA[<p>Ich hab jetzt mal versucht die Mittelwertberechnung ohne Funktion zu realisieren. Dabei ist mir nun folgendes aufgefallen. Wenn der Zähler der for-Schleife auf 0 steht, dann adressiert er mir ja das Element 0 im Vector. Nur steht da eine 0 obwohl ich für das 0-te-Element eine andere Zahl als 0 eingegeben habe...</p>
<p>Hier der Code:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;numeric&gt;
using namespace std;

//void mittelwert(vector&lt;double&gt;* werte)
//{
//	int i, anzahl;
//
//	anzahl = werte[i];
//
//}

int main()
{
	int anzahl = 0, c = 0;
	int wert = 0, summe = 0, ergebnis = 0;
	vector&lt;double&gt; werte(1);

	cout &lt;&lt; &quot;Mittelwert-Berechnung&quot; &lt;&lt; endl &lt;&lt; endl;

	do
	{
		cout &lt;&lt; anzahl+1 &lt;&lt; &quot;. Wert angeben: &quot;;

		c = cin.peek();
		if(c != 'e')
		{
			cin &gt;&gt; wert;
			werte.push_back(wert);
			char cend = cin.get();
			anzahl++;
		}
	}
	while(c != 'e');

	cout &lt;&lt; werte[3];

	for(int i=0; i&lt;anzahl; i=i+1)
	{
		summe = summe + werte[i];
	}

	ergebnis = summe / anzahl;

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071611</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Tue, 31 May 2011 17:03:23 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 17:05:41 GMT]]></title><description><![CDATA[<p>Du hast den vector&lt;&gt; mit einem Element angelegt, das mit 0 vorbelegt ist - die von dir eingelesenen Elemente beginnen ab Index 1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071612</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 31 May 2011 17:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 17:26:36 GMT]]></title><description><![CDATA[<p>Hm. Da wär ich jetzt nie drauf gekommen. Man kann anscheinend vectoren auch mit 0 vorbelegen.</p>
<p>So, jetzt vielleicht nochmal zum Thema vectoren an Funktionen übergeben. Wie mach ich das jetzt am Besten, bzw. ich hab dazu noch einige Frage:</p>
<blockquote>
<pre><code class="language-cpp">double mv = accumulate(werte.begin(),werte.end(),0.0) / werte.size();
</code></pre>
</blockquote>
<p>Wenn ich jetzt den Code von dir anschau ist mir da jetzt einiges nicht klar. Dass die Methode size() die Anzahl der im vector&lt;&gt; enthaltenen Element zurückgibt hab ich erlesenen können; somit ist das klar.</p>
<blockquote>
<p>Returns the result of accumulating all the values in the range [first,last) to init.</p>
<p>accumulate ( InputIterator first, InputIterator last, T init );</p>
</blockquote>
<p>Was aber nun accumulate() genau macht ist mir noch nicht ganz klar. Laut cplusplus ist die Standardoperation das Aufsummieren aller Elemente in einem Bereich und zurückgeben des berechneten Wertes. Was mir aber nicht klar ist, ist was mit dem &quot;init&quot; in obigem Zitat gemeint ist. Ich kann mir zwar denken, dass die Methode .begin quasi den Wert liefert der von obiger Definition durch first gefordert ist und die Methode .end den Wert liefert der von obiger Definition durch last gefordert ist. Was aber mach nunt begin und end wirklich?</p>
<p>Gibts eigentlich noch eine andere Seite als cplusplus bei der man evtl. einfach er auf die Methoden-Erklärung der STL kommt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071625</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Tue, 31 May 2011 17:26:36 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 17:43:15 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Wenn ich jetzt den Code von dir anschau ist mir da jetzt einiges nicht klar. Dass die Methode size() die Anzahl der im vector&lt;&gt; enthaltenen Element zurückgibt hab ich erlesenen können; somit ist das klar.</p>
<blockquote>
<p>Returns the result of accumulating all the values in the range [first,last) to init.</p>
<p>accumulate ( InputIterator first, InputIterator last, T init );</p>
</blockquote>
<p>Was aber nun accumulate() genau macht ist mir noch nicht ganz klar. Laut cplusplus ist die Standardoperation das Aufsummieren aller Elemente in einem Bereich und zurückgeben des berechneten Wertes. Was mir aber nicht klar ist, ist was mit dem &quot;init&quot; in obigem Zitat gemeint ist. Ich kann mir zwar denken, dass die Methode .begin quasi den Wert liefert der von obiger Definition durch first gefordert ist und die Methode .end den Wert liefert der von obiger Definition durch last gefordert ist. Was aber mach nunt begin und end wirklich?</p>
</blockquote>
<p>Du kannst dir die Iteratoren als eine Weiterentwicklung von Zeigern vorstellen - du kannst sie dereferenzieren, weiterschieben und vergleichen. begin() liefert einen Iterator auf den Anfang des Containers, end() einen auf das Ende (genauer: hinter das letzte Element), damit hast du einen Bereich, den du als first/last an den Algorithmus übergeben kannst.<br />
Der Wert <code>init</code> ist der Startwert für die Summierung (und entspricht dem <code>summe = 0</code> bei deiner manuellen Schleife. Der ist nötig, weil dort je nach Anwendung andere Ausgangswerte notwendig werden könnten, z.B.:</p>
<pre><code class="language-cpp">//geometrisches Mittel:
double geo = pow( accumulate(werte.begin(),werte.end(),1.0,multiplies&lt;double&gt;), 1/werte.size() );

//String-Verkettung:
vector&lt;string&gt; zeilen;
...
string datei = accumulate(zeilen.begin(),zeilen.end(),string());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071636</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 31 May 2011 17:43:15 GMT</pubDate></item><item><title><![CDATA[Reply to STL-Container - Vector on Tue, 31 May 2011 18:48:47 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Returns the result of accumulating all the values in the range [first,last) to init.</p>
<p>accumulate ( InputIterator first, InputIterator last, T init );</p>
</blockquote>
<p>Nochmal ein bisschen anders erklaert: Stell dir einen Iterator wie ein Zeiger vor. Dieser zeigt an eine bestimmte Stelle in deiner Datentruktur, in deinem Falle ein vector. Die Funktion accumulate will von dir zwei solcher Zeiger haben. Einen der auf den Anfang und einen der auf das Ende der Datenstruktur zeigt.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">vector&lt;int&gt; werte;

// Fülle den vector 'werte' mit den zahlen von 0-9
for(int i = 0; i &lt; 10; ++i)
    werte.push_back(i);
</code></pre>
<p>Das sieht dann grafisch ungefaehr so aus:</p>
<pre><code>=================================================
        | 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 | 
        =================================================
</code></pre>
<p>Jetzt stellt dir dein vector diese Iteratoren bereit. In deinem Falle begin() und end(). Die würden dann hierhin zeigen:</p>
<pre><code>=================================================
        | 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 | 
        =================================================
  begin()-^                                         end() -^
</code></pre>
<p>begin() zeigt auf das erste Element und end() auf das Element nach dem letzten Element.</p>
<p>Jetzt sagst du accumulate: Hey, summiere mir mal die Wete von begin() bis end(). Dann laeuft accumulate gemütlich von Element zu Element bis es im Nichts (bei end()) landet und hört dann auf. Es macht also 0+1+2+3+4+5+6+7+8+9. Nebenbei hast du halt die Möglichkeit einen eigenen Startwert anzugeben, also: meinStartWert+0+1+2+3+4+5+6+7+8+9. Und genau dieser Startwert ist das <em>init</em>.</p>
<p>Nach diesem Iteratorprinzip laufen alle Container der STL. Diese Iterator geben dir die Möglichkeit unabhaegig von der wirklichen Datenstruktur dahinter mit Algorithmen (wie accumulate) darauf zu arbeiten. Jede Datenstrukur stellt Iteratoren bereit, sodass du an accumulate gerne auch ein std::list oder ein std::deque übergeben könntest.</p>
<p>Siehst du wie schön das ist! Du hast eine Funktion und kannst verschieden Datenstrukturen übergeben ohne für jede Datenstruktur ein eigenes accumulate zu schreiben und von diesem accumulate gibt es noch weitere Zahlreiche in der STL.</p>
<p>vip@r schrieb:</p>
<blockquote>
<p>Gibts eigentlich noch eine andere Seite als cplusplus bei der man evtl. einfach er auf die Methoden-Erklärung der STL kommt?</p>
</blockquote>
<p>Das Forum und die dir genannte Referenz. Wie oben beschrieben laeuft alles nach einem Prinzip. Hast du es einmal verstanden, verstehst du auch alles <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/2071683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071683</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 31 May 2011 18:48:47 GMT</pubDate></item></channel></rss>