<?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[Unterschied zwischen STL vector und deque]]></title><description><![CDATA[<p>Hallo,</p>
<p>in dem Buch &quot;Die C++ Standardbibliothek&quot; von Kuhlins&amp;Schader wird behauptet,<br />
dass der wesentliche Unterschied zwischen einem STL vector und einer STL deque<br />
in dem Einfügen/Entfernen von Elementen an erster Position besteht. Diese<br />
Operation hat bei einem vector die Komplexität O(n), bei einer deque dagegen<br />
O(1). Des Weiteren schreiben die Autoren, dass wegen des komplexeren Aufbaus<br />
einer deque im Vergleich zu einem vector bei gleicher Funktionalität das<br />
Laufzeitverhalten bei Verwendung einer deque statt vector deshalb etwas<br />
schlechter ist.</p>
<p>Leider wird der letzte Punkt nicht weiter ausgeführt. Könnt Ihr mir praktische<br />
Beispiele nennen, die der Performace-Verlust bei einer deque im Vergleich zu<br />
einem vector aussieht und wann eine deque einem vektor vorzuziehen ist, falls<br />
Einfügen/Entfernen vorne unwesentlich für die Anwendung ist.</p>
<p>Vielen Dank.<br />
Gruß,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156827/unterschied-zwischen-stl-vector-und-deque</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 22:14:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156827.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Aug 2006 16:01:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unterschied zwischen STL vector und deque on Sun, 20 Aug 2006 16:01:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>in dem Buch &quot;Die C++ Standardbibliothek&quot; von Kuhlins&amp;Schader wird behauptet,<br />
dass der wesentliche Unterschied zwischen einem STL vector und einer STL deque<br />
in dem Einfügen/Entfernen von Elementen an erster Position besteht. Diese<br />
Operation hat bei einem vector die Komplexität O(n), bei einer deque dagegen<br />
O(1). Des Weiteren schreiben die Autoren, dass wegen des komplexeren Aufbaus<br />
einer deque im Vergleich zu einem vector bei gleicher Funktionalität das<br />
Laufzeitverhalten bei Verwendung einer deque statt vector deshalb etwas<br />
schlechter ist.</p>
<p>Leider wird der letzte Punkt nicht weiter ausgeführt. Könnt Ihr mir praktische<br />
Beispiele nennen, die der Performace-Verlust bei einer deque im Vergleich zu<br />
einem vector aussieht und wann eine deque einem vektor vorzuziehen ist, falls<br />
Einfügen/Entfernen vorne unwesentlich für die Anwendung ist.</p>
<p>Vielen Dank.<br />
Gruß,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120998</guid><dc:creator><![CDATA[zubrowa]]></dc:creator><pubDate>Sun, 20 Aug 2006 16:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied zwischen STL vector und deque on Sun, 20 Aug 2006 16:51:34 GMT]]></title><description><![CDATA[<p>Eine deque ist ein array von arrays, daher ist das &quot;interne Management&quot; aufwändiger als bei vector. Schau mal hier beim Thema Stack mit vector oder deque:<br />
<a href="http://www.henkessoft.de/C++/C++%20Fortgeschrittene/C++_Fortgeschrittene.htm#2.8._Die_Klasse_Stack_als_Wrapper_f%FCr" rel="nofollow">http://www.henkessoft.de/C++/C++ Fortgeschrittene/C++_Fortgeschrittene.htm#2.8._Die_Klasse_Stack_als_Wrapper_f�r</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121014</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Sun, 20 Aug 2006 16:51:34 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied zwischen STL vector und deque on Mon, 21 Aug 2006 07:42:36 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Bitte korrigiert mich, sollte ich falsch liegen. Soweit ich weiss, ist ein 'deque' auf zwei Arten implementierbar:<br />
1.) als Array (ein einzelnes sollte reichen), mit zusaetzlicher Speicherung der Indizes des 'heads' und des 'tails'.<br />
2.) als doppelt verkettete Liste. Damit ergibt sich auch O(1) bei Zugriff auf dass erste/letzte Element. Beim Zugriff auf ein anderes Element muss ueber die Liste iteriert werden, beim Vector laesst es sich per Index ansprechen, wodurch in diesem Fall der Vector Performancevorteile bietet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121237</guid><dc:creator><![CDATA[bumbytie]]></dc:creator><pubDate>Mon, 21 Aug 2006 07:42:36 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied zwischen STL vector und deque on Mon, 21 Aug 2006 08:09:57 GMT]]></title><description><![CDATA[<p>bumbytie schrieb:</p>
<blockquote>
<p>1.) als Array (ein einzelnes sollte reichen), mit zusaetzlicher Speicherung der Indizes des 'heads' und des 'tails'.</p>
</blockquote>
<p>Stimmt, aber nur mit dynamischem Array.</p>
<p>bumbytie schrieb:</p>
<blockquote>
<p>2.) als doppelt verkettete Liste. Damit ergibt sich auch O(1) bei Zugriff auf dass erste/letzte Element. Beim Zugriff auf ein anderes Element muss ueber die Liste iteriert werden, beim Vector laesst es sich per Index ansprechen, wodurch in diesem Fall der Vector Performancevorteile bietet.</p>
</blockquote>
<p>Der Standard sagt glaube ich, dass der Indexzugriff amortisiert O(1) sein muss, das ist aber mit einer Liste nicht implementierbar.<br />
Die g++ Implementierung ist, wie Erhard Henkes sagte, ein dynamisches Array von dynamischen Arrays, damit lässt sich das realisieren. Hier der (für den Indexzugriff wichtige) operator+= des Iteratortyps:</p>
<pre><code class="language-cpp">Self&amp; operator+=(difference_type n)
{
    const difference_type offset = n + (_current - _first);
    if  (offset &gt;= 0 &amp;&amp; offset &lt; difference_type(_buffer_size()))
        _current += n;
    else
    {
        const difference_type node_offset =
	      offset &gt; 0 ? offset / difference_type(_buffer_size())
	                 : -difference_type((-offset - 1) / _buffer_size()) - 1;
	    _set_node(_node + node_offset);
	    _current = _first + (offset - node_offset * difference_type(_buffer_size()));
    }
    return *this;
}
</code></pre>
<p>(ich habe die Bezeichner etwas vereinfacht, das _-Präfix heißt Member)<br />
_set_node setzt die (normalen Zeiger) _first und _last auf die entsprechenden Elemente im neuen Knoten (welcher hier eines der eigentlichen Arrays ist), ist also quasi der Indexzugriff auf das darüberliegende Array. Fragen dazu?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121264</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 21 Aug 2006 08:09:57 GMT</pubDate></item></channel></rss>