<?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[Algorithmus Verbessern??]]></title><description><![CDATA[<p>Folgendes</p>
<p>habe ein Vektor:</p>
<pre><code class="language-cpp">std::vector&lt;doubl&gt; vTime;
</code></pre>
<p>Wenn ich nun ein Element anfüge:<br />
double time=5;</p>
<pre><code class="language-cpp">vTime.push_back(time);
</code></pre>
<p>soll die bereich bestehenden Elemente des Vectors um diese Zeil ausummiert<br />
werden.</p>
<pre><code class="language-cpp">for(std::vector&lt;double&gt;iterator it= vTime.begin(); it&lt; vTime.end();it++)
   (*it)+=Time;
</code></pre>
<p>das quaise so eine art Pyramidenform entsteht.. Wenn ich versteht was ich meine.</p>
<p>Bsp:</p>
<p>1. Iteration</p>
<p>time =3</p>
<p>2. Interation</p>
<p>time= 2</p>
<p>3. Iteration</p>
<p>time 4</p>
<p>Elemeente im Vector:<br />
1. 3<br />
2. 5<br />
3. 9</p>
<p>Num meine FRage:</p>
<p>Gibt es ne elegantere Lösung, als jedesmal wenn ich ein neues Element anfüge alle elemente durchlaufe und hochaddiere?</p>
<p>Aber ich denke wohl nicht!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184995/algorithmus-verbessern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 01:18:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184995.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Jun 2007 05:19:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 05:19:58 GMT]]></title><description><![CDATA[<p>Folgendes</p>
<p>habe ein Vektor:</p>
<pre><code class="language-cpp">std::vector&lt;doubl&gt; vTime;
</code></pre>
<p>Wenn ich nun ein Element anfüge:<br />
double time=5;</p>
<pre><code class="language-cpp">vTime.push_back(time);
</code></pre>
<p>soll die bereich bestehenden Elemente des Vectors um diese Zeil ausummiert<br />
werden.</p>
<pre><code class="language-cpp">for(std::vector&lt;double&gt;iterator it= vTime.begin(); it&lt; vTime.end();it++)
   (*it)+=Time;
</code></pre>
<p>das quaise so eine art Pyramidenform entsteht.. Wenn ich versteht was ich meine.</p>
<p>Bsp:</p>
<p>1. Iteration</p>
<p>time =3</p>
<p>2. Interation</p>
<p>time= 2</p>
<p>3. Iteration</p>
<p>time 4</p>
<p>Elemeente im Vector:<br />
1. 3<br />
2. 5<br />
3. 9</p>
<p>Num meine FRage:</p>
<p>Gibt es ne elegantere Lösung, als jedesmal wenn ich ein neues Element anfüge alle elemente durchlaufe und hochaddiere?</p>
<p>Aber ich denke wohl nicht!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310325</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 21 Jun 2007 05:19:58 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 05:46:06 GMT]]></title><description><![CDATA[<p>hola</p>
<p>merk dir doch in einer variable das ergebnis. dann brauchst du es nur beim naechsten push_back mitaddieren und selbst nochmal um die neue zahl hochaddieren.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310336</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Thu, 21 Jun 2007 05:46:06 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 06:00:24 GMT]]></title><description><![CDATA[<p>hää?? hmm.. hab ich da nich die gleiche Iterationen anzahl?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310340</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:00:24 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 06:17:06 GMT]]></title><description><![CDATA[<p>noe net ganz</p>
<pre><code class="language-cpp">int PushBack(std::vector&lt;int&gt; &amp;vec, int x, int result)
{
   vec.push_back(x + result);
   return result + x;
}

int main(void)
{
   std::vector&lt;int&gt; vec;
   int result = 0;
   result = PushBack(vec,1); // result == 1;
   result = PushBack(vec, 4); // result == 1 + 4 == 5;
   result = PushBack(vec, 7); // result == 5 + 7 == 12;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1310349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310349</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:17:06 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 06:30:08 GMT]]></title><description><![CDATA[<p>cool... das schau ich mir mal an;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310356</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:30:08 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 06:35:01 GMT]]></title><description><![CDATA[<p>hmm ne .. sorry ich hab mich glaub damals falsch ausgedrück ..</p>
<p>bsp.</p>
<p>1. Add mit 4</p>
<p>Vector: (4)</p>
<p>2. Add mit 3</p>
<p>Vector: (7),(3)</p>
<p>3. Add mit 2</p>
<p>Vector: (9),(5),(3)</p>
<p>4. Add mit 5</p>
<p>Vector: (14),(9),(8),(5)</p>
<p>so muss der vector dann aussehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310357</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 06:58:30 GMT]]></title><description><![CDATA[<p>1. bitte achte ein wenig mehr auf das was du schreibst. &quot;Zeil&quot; statt &quot;Zahl&quot; ist doch recht offensichtlich und leider keine ausnahme in diesem text <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
<p>2. nö is immernoch nicht klar.<br />
nach dem wie ich das verstanden hab, sollte am ende ein 14,10,7,5 herauskommen</p>
<p>man kann es sehr elegant lösen, wenn du diese operation nur einmal durchführen musst:</p>
<pre><code class="language-cpp">std::vector&lt;double&gt; numbers;//da sind alle deine zahlen drin die aufsummiert werden müssen
std::vector&lt;double&gt; times;

double accumulator=0;
for(std::vector&lt;double&gt;::reverse_iterator number=numbers.rbegin();number!=numbers.rend();++number)
{
    accumulator+=*number;
    times.push_back(accumulator);
}
reverse(times.begin(),times.end());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1310365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310365</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:58:30 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 06:50:18 GMT]]></title><description><![CDATA[<p>oh sorry es sollte : 14,10,8,5 rauskommen!! aulso immer aufsummiert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310366</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:50:18 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 06:53:57 GMT]]></title><description><![CDATA[<p>Die harte Version ist wohl, bei jedem Einfügen den neuen Summanden auf alle bisherigen Vektor-Elemente zu addieren. Wenn du erst viele Daten eingeben und dann die Summen ausgegeben haben willst, kannst du das Summieren auch auf später verschieben - <a href="http://cppreference.com/cppalgorithm/partial_sum.html" rel="nofollow">partial_sum()</a> (in deinem Fall wohl mit Reverse-Iteratoren) ist ideal dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310370</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 06:57:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void Push(vector&lt;int&gt;&amp; vec, int elem)
{
    for_each(vec.begin(), vec.end(), bind2nd(plus&lt;int&gt;(), elem));
    vec.push_back(elem);
}
</code></pre>
<p>Ungetestet (Header &lt;functional&gt; + &lt;algorithm&gt;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310372</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:57:03 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 06:58:13 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5021">@Konrad</a>: Was macht der code genau?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310374</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 07:00:25 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5021">@Konrad</a>: Was macht der code genau?</p>
</blockquote>
<p>wenn das element eingefügt werden soll, wird zuerst auf jedes element im vector der wert aufaddiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310377</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 21 Jun 2007 07:00:25 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 07:02:15 GMT]]></title><description><![CDATA[<p>Vermutlich nicht das richtige (for_each() wirkt vor allem durch die Nebeneffekte seines Funktors - und plus&lt;&gt; hat keinen Nebeneffekt). Wenn, dann wäre eher transform() geeignet:</p>
<pre><code class="language-cpp">transform(vec.begin(),vec.end(),vec.begin(),bind2nd(plus&lt;int&gt;,elem));
</code></pre>
<p>Und mit dieser Anpassung bewirkt der Code, daß der neue Summand auf jedes bisher vorhandene Element aufaddiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310380</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Jun 2007 07:02:15 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 07:11:59 GMT]]></title><description><![CDATA[<p>ok, und dies ist schneller wenn ich das mit nem normalen iterator mache und jedes elem += hochaddiere?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310387</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 21 Jun 2007 07:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 07:17:55 GMT]]></title><description><![CDATA[<p>mein vorschlag waere:</p>
<pre><code class="language-cpp">class Vector
{
   public:
      Vector(void) : result(0) { vec.push_back(result); }
      void push_back(int x)
      {
         vec.push_back(result += x);
      }
      int operator[](std::size_t pos)
      {
         return vec.back() - vec[pos];
      }
      std::size_t size(void) const { vec.size() - 1; }
      void clear(void)
      {
         vec.clear();
         vec.push_back(result = 0);
      }

   private:
      std::vector&lt;int&gt; vec;
      int result;
};
</code></pre>
<p>der zugriff dauert zwar bissl laenger, jedoch ersparst du dir das aufsummieren der einzelnen werte im vector.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310391</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Thu, 21 Jun 2007 07:17:55 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 07:23:20 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn, dann wäre eher transform() geeignet:</p>
</blockquote>
<p>Arg. <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="😉"
    /> Es ist nicht nur &quot;geeignet&quot; sondern war auch gemeint.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310398</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 21 Jun 2007 07:23:20 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 07:25:21 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>ok, und dies ist schneller wenn ich das mit nem normalen iterator mache und jedes elem += hochaddiere?</p>
</blockquote>
<p>Für nichttriviale Typen ist das manuelle Durch-Iterieren eventuell schneller, weil man eben '+=' statt '+' verwenden kann und somit das Anlegen temporärer Objekte verhindert. Für 'int' sollte es relativ egal sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310399</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 21 Jun 2007 07:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus Verbessern?? on Thu, 21 Jun 2007 12:33:59 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>ok, und dies ist schneller wenn ich das mit nem normalen iterator mache und jedes elem += hochaddiere?</p>
</blockquote>
<p>Komplexitätstheoretisch dürfte das keinen Unterschied bringen. Die einzige <em>echte</em> Verbesserung (jenseits von Mikro-Optimierung), die mir hier einfällt, ist Lazy Evaluation (das bringt aber nur dann etwas, wenn du erst alle Werte einliest und das Aufsummieren auf Später verschiebst):</p>
<pre><code class="language-cpp">for(...)
{
  cin&gt;&gt;val;
  vec.push_back(val);//hier sammeln wir nur die Elemente, ohne zu summieren
}
partial_sum(vec.rbegin(),vec.rend(),vec.rbegin());//damit summierst du alle oben eingelesenen Elemente auf
</code></pre>
<p>Wenn du immer abwechselnd Werte eingeben und Zwischensummen berechnen willst, wird der Verwaltungsaufwand für diesen Ansatz vermutlich zu hoch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310652</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Jun 2007 12:33:59 GMT</pubDate></item></channel></rss>