<?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[std::string nach std::vector&amp;lt;char&amp;gt; umwandeln]]></title><description><![CDATA[<p>Welche Methode ist schneller um einen std::string nach std::vector&lt;char&gt; umzuwandeln?</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; v(str.begin(), str.end());
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; v(str.length());
v.insert(v.begin(), str.begin(), str.end());
</code></pre>
<p>Kann bei der ersten Variante sofort der benötigte Speicherplatz ermittelt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161300/std-string-nach-std-vector-lt-char-gt-umwandeln</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 19:59:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161300.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Oct 2006 10:42:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::string nach std::vector&amp;lt;char&amp;gt; umwandeln on Thu, 05 Oct 2006 10:42:02 GMT]]></title><description><![CDATA[<p>Welche Methode ist schneller um einen std::string nach std::vector&lt;char&gt; umzuwandeln?</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; v(str.begin(), str.end());
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; v(str.length());
v.insert(v.begin(), str.begin(), str.end());
</code></pre>
<p>Kann bei der ersten Variante sofort der benötigte Speicherplatz ermittelt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149803</guid><dc:creator><![CDATA[insert]]></dc:creator><pubDate>Thu, 05 Oct 2006 10:42:02 GMT</pubDate></item><item><title><![CDATA[Reply to std::string nach std::vector&amp;lt;char&amp;gt; umwandeln on Thu, 05 Oct 2006 17:00:05 GMT]]></title><description><![CDATA[<p>insert schrieb:</p>
<blockquote>
<p>Kann bei der ersten Variante sofort der benötigte Speicherplatz ermittelt werden?</p>
</blockquote>
<p>ja, eigentlich schon. Weiß aber nicht, obs das auch tut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150048</guid><dc:creator><![CDATA[DrGreenthumb]]></dc:creator><pubDate>Thu, 05 Oct 2006 17:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::string nach std::vector&amp;lt;char&amp;gt; umwandeln on Thu, 05 Oct 2006 20:55:17 GMT]]></title><description><![CDATA[<p>Wenn ma bei VS8 den Konstruktor mit der Iteratorrange weiterverfolgt landet man irgendwann an folgender Codestelle:</p>
<pre><code class="language-cpp">size_type _Count = 0;
		_Distance(_First, _Last, _Count);
		size_type _Capacity = capacity();

		if (_Count == 0)
			;
		else if (max_size() - size() &lt; _Count)
			_Xlen();	// result too long
		else if (_Capacity &lt; size() + _Count)
			{	// not enough room, reallocate
			_Capacity = max_size() - _Capacity / 2 &lt; _Capacity
				? 0 : _Capacity + _Capacity / 2;	// try to grow by 50%
			if (_Capacity &lt; size() + _Count)
				_Capacity = size() + _Count;
			pointer _Newvec = this-&gt;_Alval.allocate(_Capacity);
			pointer _Ptr = _Newvec;
</code></pre>
<p>wobei _Distance durch simples inkrementieren von _First die Anzahl der Elemente besorgt.<br />
Da die andere Variante letztendlich an genau der gleichen Codestelle landet,dürfte die erste Variante wohl geringfügig schneller sein.<br />
Ob das jetzt bei jeder Implementierung so ist.....keine Ahnung.</p>
<p>PS:Noch nen Tacken schneller sollte ne Kombination aus ner vector Konstruktion mit str.length() und std::copy sein(length arbeitet in konstanter Zeit und copy führt ja(in den meisten Implementierungen) keinerlei Größenüberprüfungen durch.Somit sparst du im Vergleich zu der ersten Variante mindestens den _Distance kram ein).</p>
<p>Gruss Spacelord</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150216</guid><dc:creator><![CDATA[Spacelord]]></dc:creator><pubDate>Thu, 05 Oct 2006 20:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::string nach std::vector&amp;lt;char&amp;gt; umwandeln on Fri, 06 Oct 2006 08:12:59 GMT]]></title><description><![CDATA[<p>Spacelord schrieb:</p>
<blockquote>
<p>wobei _Distance durch simples inkrementieren von _First die Anzahl der Elemente besorgt.</p>
</blockquote>
<p>Bist du dir ganz sicher? Nach meinem Wissen schaltet _Distance() je nach Iterator-Typ zwischen dem Hochzählen (alle &quot;einfachen&quot; Iteratoren) und &quot;Count=Last-First;&quot; (Random Access Iteratoren) um.<br />
(aber da solltest du dir die Implementation genauer ansehen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150346</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 06 Oct 2006 08:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to std::string nach std::vector&amp;lt;char&amp;gt; umwandeln on Fri, 06 Oct 2006 09:36:14 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Spacelord schrieb:</p>
<blockquote>
<p>wobei _Distance durch simples inkrementieren von _First die Anzahl der Elemente besorgt.</p>
</blockquote>
<p>Bist du dir ganz sicher? Nach meinem Wissen schaltet _Distance() je nach Iterator-Typ zwischen dem Hochzählen (alle &quot;einfachen&quot; Iteratoren) und &quot;Count=Last-First;&quot; (Random Access Iteratoren) um.</p>
</blockquote>
<p>Ich kenne _Distance zwar nicht, aber zumindest für std::distance ist diesen Verhalten garantiert. Also für Random-Access-Iteratoren (insbesondere auch Pointer) ist std::distance eine O(1)-Operation. Für alle anderen Iterator-Typen ist std::distance linear.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150417</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 06 Oct 2006 09:36:14 GMT</pubDate></item><item><title><![CDATA[Reply to std::string nach std::vector&amp;lt;char&amp;gt; umwandeln on Fri, 06 Oct 2006 18:56:39 GMT]]></title><description><![CDATA[<p>Da habt ihr beiden Recht.<br />
Bin jetzt mal mit dem Debugger durchgelaufen und _Distance ist für Random Access Iteratoren (mit Last-First) überladen.<br />
Mein Fehler. <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>
<p>Gruß Spacelord</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150796</guid><dc:creator><![CDATA[Spacelord]]></dc:creator><pubDate>Fri, 06 Oct 2006 18:56:39 GMT</pubDate></item></channel></rss>