<?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[complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren]]></title><description><![CDATA[<p>Ich habe speziell ausgerichtet C-Arrays die von der fftw Bibliothek stammen.<br />
Nun möchte ich aber danach diesen Datensatz in einem vector haben, dessen Datensatz auf exakt demselben C-Array beruhen soll.</p>
<p>Geht das irgendwie?</p>
<p>Bislang erstelle ich erst ein vector und kopiere denn dann in ein fftw kompatibles c-Array rechne mit fftw und kopiere danach wieder in den vector.<br />
Der Nachteil dabei, mal abgesehen von der zusätzlichen Zeit die zum kopieren verloren geht ist der doppelte Speicherbedarf.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289243/complex-lt-double-gt-nach-vector-lt-complex-lt-double-gt-gt-konvertieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 07:33:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289243.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 30 Jun 2011 21:59:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Thu, 30 Jun 2011 21:59:17 GMT]]></title><description><![CDATA[<p>Ich habe speziell ausgerichtet C-Arrays die von der fftw Bibliothek stammen.<br />
Nun möchte ich aber danach diesen Datensatz in einem vector haben, dessen Datensatz auf exakt demselben C-Array beruhen soll.</p>
<p>Geht das irgendwie?</p>
<p>Bislang erstelle ich erst ein vector und kopiere denn dann in ein fftw kompatibles c-Array rechne mit fftw und kopiere danach wieder in den vector.<br />
Der Nachteil dabei, mal abgesehen von der zusätzlichen Zeit die zum kopieren verloren geht ist der doppelte Speicherbedarf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086916</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Thu, 30 Jun 2011 21:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Thu, 30 Jun 2011 22:06:18 GMT]]></title><description><![CDATA[<p>Also was genau willst du jetzt erreichen? Du kannst die Inhalte des nackten Arrays per assign() (oder STL-Algorithmen ala copy()) in einen vector&lt;&gt; packen. Und wenn du vorsichtig genug bist, kannst du dir mit <code>&amp;v.front()</code> die vector&lt;&gt;-Inhalte als Array verwenden (letzteres auf eigene Gefahr).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086918</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 30 Jun 2011 22:06:18 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Thu, 30 Jun 2011 22:27:41 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Und wenn du vorsichtig genug bist, kannst du dir mit <code>&amp;v.front()</code> die vector&lt;&gt;-Inhalte als Array verwenden</p>
</blockquote>
<p>Das liefert die Adresse des Iterators. <code>&amp;vector[0]</code> funktioniert.</p>
<blockquote>
<p>(letzteres auf eigene Gefahr).</p>
</blockquote>
<p>Der Standard garantiert, dass der Speicher an einem Stück und IIRC auch sequentiell ist. Das Einzige, was dann noch schiefgehen könnte, wäre eine rückwärts gespeicherte Sequenz <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/2086921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086921</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 30 Jun 2011 22:27:41 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Thu, 30 Jun 2011 22:31:16 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Und wenn du vorsichtig genug bist, kannst du dir mit <code>&amp;v.front()</code> die vector&lt;&gt;-Inhalte als Array verwenden</p>
</blockquote>
<p>Das liefert die Adresse des Iterators. <code>&amp;vector[0]</code> funktioniert.</p>
</blockquote>
<p>front() ist kein Iterator, sondern eine Referenz auf das Element.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086922</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 30 Jun 2011 22:31:16 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Thu, 30 Jun 2011 22:32:02 GMT]]></title><description><![CDATA[<p>Sorry, mein Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086924</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 30 Jun 2011 22:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Thu, 30 Jun 2011 22:34:17 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Und wenn du vorsichtig genug bist, kannst du dir mit <code>&amp;v.front()</code> die vector&lt;&gt;-Inhalte als Array verwenden</p>
</blockquote>
<p>Das liefert die Adresse des Iterators. <code>&amp;vector[0]</code> funktioniert.</p>
</blockquote>
<p>Du kennst den Unterschied zwischen &quot;begin()&quot; und &quot;front()&quot;?</p>
<blockquote>
<blockquote>
<p>(letzteres auf eigene Gefahr).</p>
</blockquote>
<p>Der Standard garantiert, dass der Speicher an einem Stück und IIRC auch sequentiell ist. Das Einzige, was dann noch schiefgehen könnte, wäre eine rückwärts gespeicherte Sequenz <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>
</blockquote>
<p>Der Standard garantiert nicht, daß die Daten immer an der selben Stelle bleiben - das kann ins Auge gehen, wenn die aufgerufene Funktion den Zeiger speichert, um später damit arbeiten zu können (hat zwar nichts direkt mit dem Problem zu tun, aber nebenan gibt es eine nette Diskussion über strtok()).<br />
Außerdem mußt du bei solchen Konstruktionen auch auf die Größe des vector&lt;&gt;s achten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086925</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 30 Jun 2011 22:34:17 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Thu, 30 Jun 2011 22:42:31 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Der Standard garantiert nicht, daß die Daten immer an der selben Stelle bleiben -</p>
</blockquote>
<p>Wenn die Grösse des Arrays nicht geändert wird, schon. Ansonsten verhält es sich auch nicht anders als bei einem realloc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086932</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 30 Jun 2011 22:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Fri, 01 Jul 2011 05:32:41 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Also was genau willst du jetzt erreichen? Du kannst die Inhalte des nackten Arrays per assign() (oder STL-Algorithmen ala copy()) in einen vector&lt;&gt; packen. Und wenn du vorsichtig genug bist, kannst du dir mit <code>&amp;v.front()</code> die vector&lt;&gt;-Inhalte als Array verwenden (letzteres auf eigene Gefahr).</p>
</blockquote>
<p>Zunächst muss das Array was ich speichern will richtig ausgerichtet sein. Das wird in einem Code den ich dafür wiederverwende so geprüft:</p>
<pre><code class="language-cpp">bool aligned = ( (reinterpret_cast&lt;size_t&gt;(in)&amp;15) | (reinterpret_cast&lt;size_t&gt;(out)&amp;15) ) == 0;
</code></pre>
<p>wobei in und out complex&lt;double&gt;* arrays sind.</p>
<p>std:copy kopiert mir doch die Daten? Genau das will ich ja nicht. Das ich auf die Daten des vectors mit &amp;v[0] zugreifen kann weiß ich und würde ich auch nutzen.</p>
<p>Wenn ich mir die Doku zu assign anschauen (<a href="http://www.cplusplus.com/reference/stl/vector/assign/" rel="nofollow">http://www.cplusplus.com/reference/stl/vector/assign/</a>) dann sehe ich nicht wie ich damit einen vector den Pointer auf mein c-array übergeben kann.</p>
<pre><code class="language-cpp">// Erstellen des Arrays (c-stil, da C-lib)

complex&lt;double&gt;* FFTW::createArray(size_t size)
{
    fftw_complex* array = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * size);
    return reinterpret_cast&lt;complex&lt;double&gt;*&gt;(array);
}

// neu zuordnen zu vector?
int N = 1024;
complex&lt;double&gt;* rawdata = fft.createArray(N);
vector&lt;complex&lt;double&gt; &gt; fftdata;
fftdata.assign(rawdata, rawdata + N;
</code></pre>
<p>Hierbei müsste nun rawdata[0] und &amp;fftdata[0] auf exakt denselben Pointer weisen. Ist das so ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086999</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 01 Jul 2011 05:32:41 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Fri, 01 Jul 2011 05:39:39 GMT]]></title><description><![CDATA[<p>Das was Du möchtest geht mit std::vector einfach nicht. Du kannst Dir aber leicht einen eigenen Container basteln der das Interface für Random Access Container implementiert und dabei nur auf dem Array arbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087000</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 01 Jul 2011 05:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Fri, 01 Jul 2011 05:51:51 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Das was Du möchtest geht mit std::vector einfach nicht. Du kannst Dir aber leicht einen eigenen Container basteln der das Interface für Random Access Container implementiert und dabei nur auf dem Array arbeitet.</p>
</blockquote>
<p>Das hatte ich auch schon überlegt. Aber der eigentliche Grund warum ich einen vector und kein pointer array haben möchte ist, das der komplette code außerhalb der fft routine z.B. die mathematischen Routinen aber auch die gui auf std::vector basiert.</p>
<p>Jetzt alles auf einen neuen myvectorfft umzustellen wäre unsinnig weil dann alle mathebibliotheken damit nichts anfangen können oder umgeschrieben werden müssten.</p>
<p>Als ich den ursprünglichen Code übernommen hatte basierte alles auf einer selbstgeschriebenen complex Klasse. Diese Abhängigkeit herauszubekommen war eine sehr umfangreiche Arbeit. Jetzt möchte ich nicht schon wieder so einen Fehler einbauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087002</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 01 Jul 2011 05:51:51 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Fri, 01 Jul 2011 06:33:13 GMT]]></title><description><![CDATA[<p>Für die Ausrichtung könnte man einen entsprechenden Allokator adaptieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087011</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 01 Jul 2011 06:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Fri, 01 Jul 2011 06:35:45 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Für die Ausrichtung könnte man einen entsprechenden Allokator adaptieren.</p>
</blockquote>
<p>kannst du da genauer werden?</p>
<p>Was genau fftw_malloc macht weiß ich nicht, mal abgesehen von der Ausrichtung im Speicher.</p>
<p>Wenn ich jetzt mit std:vector ein Array erstelle, dann müsste das exact den Anforderungen von fftw entsprechen, da ansonsten die Performance bei der Berechnung einbricht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087012</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 01 Jul 2011 06:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Fri, 01 Jul 2011 06:45:20 GMT]]></title><description><![CDATA[<p>Der Allokator könnte den Speicher mit fftw_malloc anfordern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087017</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 01 Jul 2011 06:45:20 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Fri, 01 Jul 2011 06:48:12 GMT]]></title><description><![CDATA[<p>soweit habe ich das Konzept verstanden, aber ich habe so etwas noch nie gemacht und würde mich freuen, wenn jemand dazu ein Code Beispiel hier posten oder eine Link dazu liefern könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087018</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 01 Jul 2011 06:48:12 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Fri, 01 Jul 2011 13:31:56 GMT]]></title><description><![CDATA[<p>siehe z.B.<br />
<a href="http://www.josuttis.com/cppcode/allocator.html" rel="nofollow">http://www.josuttis.com/cppcode/allocator.html</a></p>
<p>&quot;allocate&quot; und &quot;deallocate&quot; müsst du dein &quot;alloc&quot; und dein &quot;free&quot; einsetzen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087211</guid><dc:creator><![CDATA[Drehleiter]]></dc:creator><pubDate>Fri, 01 Jul 2011 13:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to complex&amp;lt;double&amp;gt; * nach vector&amp;lt;complex&amp;lt;double&amp;gt;&amp;gt; konvertieren on Fri, 01 Jul 2011 14:26:47 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>std:copy kopiert mir doch die Daten? Genau das will ich ja nicht. Das ich auf die Daten des vectors mit &amp;v[0] zugreifen kann weiß ich und würde ich auch nutzen.</p>
<p>Wenn ich mir die Doku zu assign anschauen (<a href="http://www.cplusplus.com/reference/stl/vector/assign/" rel="nofollow">http://www.cplusplus.com/reference/stl/vector/assign/</a>) dann sehe ich nicht wie ich damit einen vector den Pointer auf mein c-array übergeben kann.</p>
</blockquote>
<p>Iteratoren sind eine Erweiterung von Zeigern für beliebige Container-Klassen - und natürlich kannst du Funktionen wie assign(), die Iteratoren/paare als Parameter erwarten, auch blanke Zeiger übergeben.<br />
Allerdings sollte ich dazusagen, daß assign() die übergebenen Daten ebenfalls in den vom vector&lt;&gt; verwalteten Speicherbereich kopiert.</p>
<p>Das heißt, für deine Zwecke ist der erwähnte Allokator-Ansatz wohl praktischer in der Umsetzung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087246</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 01 Jul 2011 14:26:47 GMT</pubDate></item></channel></rss>