<?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[vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln]]></title><description><![CDATA[<p>Wie kann ich am elegantesten das vorletzte Element eines vector&lt;T&gt; ermitteln? Mit back() kriege ich ja das letzte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324003/vorletztes-element-eines-vector-lt-t-gt-ermitteln</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 01:40:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324003.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Feb 2014 13:35:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 13:35:53 GMT]]></title><description><![CDATA[<p>Wie kann ich am elegantesten das vorletzte Element eines vector&lt;T&gt; ermitteln? Mit back() kriege ich ja das letzte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385346</guid><dc:creator><![CDATA[ggggggggg]]></dc:creator><pubDate>Wed, 26 Feb 2014 13:35:53 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 13:37:43 GMT]]></title><description><![CDATA[<p>ggggggggg schrieb:</p>
<blockquote>
<p>Wie kann ich am elegantesten das vorletzte Element eines vector&lt;T&gt; ermitteln? Mit back() kriege ich ja das letzte.</p>
</blockquote>
<p>Mir würden in den Sinn kommen<br />
[v.size()-1] oder *(end()-2)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385347</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 26 Feb 2014 13:37:43 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 13:40:03 GMT]]></title><description><![CDATA[<p>Beispielsweise *(v.end()-2) oder v[v.size() - 2] oder *(v.rbegin() + 1).</p>
<p>edit: Zu langsam</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385348</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 26 Feb 2014 13:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 13:45:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">*(++vec.rbegin())
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2385352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385352</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 26 Feb 2014 13:45:07 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 13:45:36 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">(&amp;v.back())[-1]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2385353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385353</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 26 Feb 2014 13:45:36 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 14:15:17 GMT]]></title><description><![CDATA[<pre><code>-1[&amp;v.back()]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2385361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385361</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 26 Feb 2014 14:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 16:10:36 GMT]]></title><description><![CDATA[<p>v.end()[-1]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385380</guid><dc:creator><![CDATA[kkaw]]></dc:creator><pubDate>Wed, 26 Feb 2014 16:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 16:11:28 GMT]]></title><description><![CDATA[<p>kkaw schrieb:</p>
<blockquote>
<p>v.end()[-1]</p>
</blockquote>
<p>äh ... -2 für das VORetzte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385381</guid><dc:creator><![CDATA[kkaw]]></dc:creator><pubDate>Wed, 26 Feb 2014 16:11:28 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 18:06:13 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<pre><code>-1[&amp;v.back()]
</code></pre>
</blockquote>
<p>eher nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385407</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 26 Feb 2014 18:06:13 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 18:10:01 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::vector&lt;T&gt;(original.begin(), original.end() - 1).back()
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2385408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385408</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 26 Feb 2014 18:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 18:21:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::vector&lt;int&gt; v = ...;
std::vector&lt;int&gt; idx(v.size()); std::iota(idx.begin(), idx.end(), 0);
int n=1; for (int i=1; i&lt;=v.size(); ++i) n*=i;
int m = n - n/v.size()-1;
while (m--) std::next_permutation(idx.begin(), idx.end());
std::cout &lt;&lt; *std::next(v.begin(), idx.front()) &lt;&lt; '\n';
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2385411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385411</guid><dc:creator><![CDATA[O(n!)]]></dc:creator><pubDate>Wed, 26 Feb 2014 18:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 18:28:07 GMT]]></title><description><![CDATA[<pre><code>auto index = vector.size();
while (index != vector.size() - 2)
  index = std::rand();
auto el = vector[index];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2385415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385415</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 26 Feb 2014 18:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 18:35:50 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<pre><code>auto index = vector.size();
while (index != vector.size() - 2)
  index = std::rand();
auto el = vector[index];
</code></pre>
</blockquote>
<p>Wie ist eigentlich die theoretische Laufzeitkomplexität hierbei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385417</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 26 Feb 2014 18:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 19:01:36 GMT]]></title><description><![CDATA[<p>Ich tippe auf O(1).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385422</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 26 Feb 2014 19:01:36 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 19:06:41 GMT]]></title><description><![CDATA[<p>Im Prinzip kann dafür ja keine worst-case-complexity gegen werden, obiges ist daher also average-case-complexity.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385425</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 26 Feb 2014 19:06:41 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 19:30:39 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Im Prinzip kann dafür ja keine worst-case-complexity gegen werden, obiges ist daher also average-case-complexity.</p>
</blockquote>
<p>wieso sollte worst case nicht ∞ sein? average case dürfte O(n) sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385430</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Wed, 26 Feb 2014 19:30:39 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 19:37:00 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Im Prinzip kann dafür ja keine worst-case-complexity gegen werden, obiges ist daher also average-case-complexity.</p>
</blockquote>
<p>wieso sollte worst case nicht ∞ sein?</p>
</blockquote>
<p>Ist das eine gültige Laufzeitkomplexität?</p>
<blockquote>
<p>average case dürfte O(n) sein.</p>
</blockquote>
<p>Das ist nicht möglich. <code>rand()</code> ist gleichmäßig verteilt, d.h. es macht keinen Unterschied welches N wir wählen, es wird im Durchschnitt die gleiche Anzahl Schritte benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385432</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 26 Feb 2014 19:37:00 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 19:47:24 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>asfdlol schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Im Prinzip kann dafür ja keine worst-case-complexity gegen werden, obiges ist daher also average-case-complexity.</p>
</blockquote>
<p>wieso sollte worst case nicht ∞ sein?</p>
</blockquote>
<p>Ist das eine gültige Laufzeitkomplexität?</p>
</blockquote>
<p>ob es eine gültige notation ist weiss ich nicht, jedoch liegt die lösung inhaltlich sehr nahe.</p>
<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>average case dürfte O(n) sein.</p>
</blockquote>
<p>Das ist nicht möglich. <code>rand()</code> ist gleichmäßig verteilt, d.h. es macht keinen Unterschied welches N wir wählen, es wird im Durchschnitt die gleiche Anzahl Schritte benötigt.</p>
</blockquote>
<p>ups, du hast recht. ich hab unsorgfältig gelesen dachte, dass die zufallszahl auf .size() begrenzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385435</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Wed, 26 Feb 2014 19:47:24 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 19:47:26 GMT]]></title><description><![CDATA[<p>Die durchschnittliche Anzahl der Schleifendurchläufe ist RAND_MAX.</p>
<p>Zum Rest siehe <a href="http://en.wikipedia.org/wiki/Randomized_algorithm" rel="nofollow">http://en.wikipedia.org/wiki/Randomized_algorithm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385436</guid><dc:creator><![CDATA[randomizer]]></dc:creator><pubDate>Wed, 26 Feb 2014 19:47:26 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 19:52:23 GMT]]></title><description><![CDATA[<p>Ich weise noch darauf hin, dass eine asymptotische Laufzeitkomplexität für den rand-Algorithmus unsinnig ist, da er nur für maximal RAND_MAX Einträge funktioniert. Für eine begrenzte Anzahl Eingaben ist jeder Algorithmus O(1). Falls da ::rand()%vector.size() stehen würde (was es sollte), wäre er O(n).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385437</guid><dc:creator><![CDATA[randomizer]]></dc:creator><pubDate>Wed, 26 Feb 2014 19:52:23 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 20:07:29 GMT]]></title><description><![CDATA[<blockquote>
<p>Falls da std::rand()%vector.size() stehen würde</p>
</blockquote>
<p>FTFY</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385438</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 26 Feb 2014 20:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 23:09:00 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<pre><code>-1[&amp;v.back()]
</code></pre>
</blockquote>
<p>eher nicht.</p>
</blockquote>
<p>Wieso nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Ist doch das selbe was du geschrieben hast, nur halt nach <code>A[B] == B[A]</code> anders rum hingeschrieben ... nicht?</p>
<p>Oder darf <code>v.back()</code> immer nen Proxy zurückliefern, auch wenn <code>T != bool</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385459</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 26 Feb 2014 23:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Wed, 26 Feb 2014 23:16:21 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<pre><code>auto index = vector.size();
while (index != vector.size() - 2)
  index = std::rand();
auto el = vector[index];
</code></pre>
</blockquote>
<p>Wenn du hier ne &quot;Generator-Variable&quot; statt <code>std::rand</code> verwenden würdest, die weder bei der Initialisierung noch beim &quot;Ziehen&quot; was macht was nicht-lokale, beobachtbare Effekte hat...<br />
...dann sollten das aktuelle Compiler sogar wegoptimieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385462</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 26 Feb 2014 23:16:21 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Thu, 27 Feb 2014 00:06:21 GMT]]></title><description><![CDATA[<p>Ihr seid alle wahnsinnig.</p>
<p>...</p>
<pre><code class="language-cpp">assert(v.size() &gt; 1);

using std::begin;
using std::end;
using std::next;
using std::random_shuffle;
using std::is_sorted;

auto target = v[v.size() - 2];
do {
  random_shuffle(begin(v), end(v));
} while(!is_sorted(next(begin(v)), end(v)) || target != v.front());

auto result = v.front();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2385469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385469</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 27 Feb 2014 00:06:21 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Thu, 27 Feb 2014 02:15:19 GMT]]></title><description><![CDATA[<p>Wundere mich gerade etwas...<br />
Hab folgendes mit GCC 4.8, 4.9 (experimental) und Clang 3.2 und 3.3 probiert (über <a href="http://gcc.godbolt.org/" rel="nofollow">http://gcc.godbolt.org/</a>):</p>
<pre><code class="language-cpp">int before_last(int const* v, int s)
{
	int i = s; 
	while (i != s - 2) 
		i = i * 48271 % 2147483647;
	return v[i ]; // WTF? Ohne dem Plenk stünde da:
//	return v;
}

int main()
{
  int foo[] = {1, 2, 3};
  return before_last(foo, 3);
}
</code></pre>
<ul>
<li></li>
</ul>
<p>Nur mit <code>-O3</code> , ohne <code>-funsafe-loop-optimizations</code> , traut sich sowieso keiner drüber.</p>
<p>Mit <code>-funsafe-loop-optimizations</code> kann GCC 4.8 alles in <code>main()</code> inlinen. Erzeugt aber zusätzlich eine non-inline <code>before_last()</code> Implementierung wo der Loop wirklich noch drinnen ist.<br />
GCC 4.9 20130909 checkt das dann auch noch: sowohl <code>main()</code> als auch die non-inline <code>before_last()</code> enthalten keinen Loop mehr.<br />
Clang lässt sich gar nicht überreden den Loop wegzulassen (es sei denn der nötige Switch heisst dort anders).</p>
<p>Nach dem wie die ganzen Compiler-Leute nicht müde wurden zu betonen, wie wichtig so Dinge wie die &quot;must make progress&quot; Regel sind, weil sie [i]sooooo viele* schöne Optimierungen ermöglichen... hätte ich mir mehr erwartet.</p>
<p>Falls das jmd. mit nem aktuellen Clang probieren könnte... fände ich interessant.</p>
<p>Achja, der Output von GCC 4.9:</p>
<pre><code>before_last(int const*, int):
	sub	esi, 2
	movsx	rsi, esi
	mov	eax, DWORD PTR [rdi+rsi*4]
	ret
main:
	mov	eax, 2
	ret
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2385473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385473</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 27 Feb 2014 02:15:19 GMT</pubDate></item><item><title><![CDATA[Reply to vorletztes Element eines vector&amp;lt;T&amp;gt; ermitteln on Thu, 27 Feb 2014 07:54:52 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: Ja, das Problem ist, dass da steht <code>-(1[&amp;v.back()])</code> . Ich war schon so stolz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2385484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2385484</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 27 Feb 2014 07:54:52 GMT</pubDate></item></channel></rss>