<?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[swappen von großen statischen Arrays]]></title><description><![CDATA[<p>Kann man effizient statische Arrays swappen?</p>
<pre><code class="language-cpp">class test
{
   GrosserDatentypMitAufwändigemKopierkonstruktor array[SehrGrosseZahl];
};
</code></pre>
<p>Einfach zeiger tauschen geht hier ja nicht. Ich muss hier eine effiziente swap funktion für die Klasse &quot;test&quot; schreiben, die ich zur Verfügung gestellt bekommen habe und nicht ändern kann.<br />
Gibt es dabei eine &quot;Standard&quot; Vorgehensweise?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255338/swappen-von-großen-statischen-arrays</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 03:02:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255338.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Nov 2009 11:00:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to swappen von großen statischen Arrays on Sun, 29 Nov 2009 11:00:21 GMT]]></title><description><![CDATA[<p>Kann man effizient statische Arrays swappen?</p>
<pre><code class="language-cpp">class test
{
   GrosserDatentypMitAufwändigemKopierkonstruktor array[SehrGrosseZahl];
};
</code></pre>
<p>Einfach zeiger tauschen geht hier ja nicht. Ich muss hier eine effiziente swap funktion für die Klasse &quot;test&quot; schreiben, die ich zur Verfügung gestellt bekommen habe und nicht ändern kann.<br />
Gibt es dabei eine &quot;Standard&quot; Vorgehensweise?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814859</guid><dc:creator><![CDATA[Foxxy]]></dc:creator><pubDate>Sun, 29 Nov 2009 11:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to swappen von großen statischen Arrays on Sun, 29 Nov 2009 11:10:03 GMT]]></title><description><![CDATA[<p>Hat GrosserDatentypMitAufwändigemKopierkonstruktor eine effiziente swap-Funktion? Wenn ja, kannst Du die ja SehrGrosseZahl mal aufrufen. Was anderes, ohne die Klasse test zu verändern, gibt's nicht.</p>
<p>Wenn das nicht schnell genug ist oder du die Klasse test ändern darfst, würde ich die folgendes empfehlen:</p>
<pre><code class="language-cpp">class test
{
   vector&lt;GrosserDatentypMitAufwändigemKopierkonstruktor&gt; array;
   ...
public:
   ...

   friend void swap(test &amp; a, test &amp; b) {
      a.array.swap(b.array);
      ...
   }
};
</code></pre>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814861</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 29 Nov 2009 11:10:03 GMT</pubDate></item><item><title><![CDATA[Reply to swappen von großen statischen Arrays on Sun, 29 Nov 2009 11:14:32 GMT]]></title><description><![CDATA[<p>Statische Arrays musst du in linearer Zeit tauschen.</p>
<p>Das einzige, was du machen kannst, ist die Klasse <code>test</code> dynamisch anzulegen und somit deren Zeiger zu tauschen. Ich empfehle eine Wrapper-Klasse:</p>
<pre><code class="language-cpp">class test_wrapper
{
	public:
		test_wrapper()
		: m_test(new test())
		{
		}

		test_wrapper(const test_wrapper&amp; origin)
		: m_test(new test(*origin.m_test))
		{
		}

		test_wrapper::~test_wrapper()
		{
			delete m_test;
		}

		test_wrapper&amp; operator= (const test_wrapper&amp; other)
		{
			test_wrapper tmp(other);
			swap(tmp);
		}

		void swap(test_wrapper&amp; other)
		{
			std::swap(m_test, other.m_test);
		}

		// hier zusätzlich Schnittstelle von test
		// bereitstellen und Aufrufe an m_test weiterleiten

	private:
		test* m_test;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1814862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814862</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 29 Nov 2009 11:14:32 GMT</pubDate></item><item><title><![CDATA[Reply to swappen von großen statischen Arrays on Sun, 29 Nov 2009 11:25:43 GMT]]></title><description><![CDATA[<p>Im Prinzip geht es um die WIN32_FIND_DATA Structure (<a href="http://msdn.microsoft.com/en-us/library/aa365740(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa365740(VS.85).aspx</a>).<br />
Da kommen ja zwei TCHAR-Arrays drin vor. Die wollte ich swappen (da ich eine lange liste von Files habe (ca. 10.000) und die über swap sortieren will. Daher kann ich an der Klasse an sich nichts ändern.</p>
<p>Auf die Idee, WIN32_FIND_DATA einfach dynamisch in meiner Klasse anzulegen, bin ich garnicht gekommen. Ich muss mal ausprobieren, ob sich dadurch ein geschwindigkeitsvorteil ergibt</p>
<pre><code class="language-cpp">class test
{
    WIN32_FIND_DATA* p;
};
inline void swap(test&amp; a, test&amp; b)
{
    WIN32_FIND_DATA* tmp = a.p;
    a.p = b.p
    b.p = tmp;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1814872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814872</guid><dc:creator><![CDATA[Foxxy]]></dc:creator><pubDate>Sun, 29 Nov 2009 11:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to swappen von großen statischen Arrays on Sun, 29 Nov 2009 11:28:53 GMT]]></title><description><![CDATA[<p>Foxxy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class test
{
    WIN32_FIND_DATA* p;
};
inline void swap(test&amp; a, test&amp; b)
{
    WIN32_FIND_DATA* tmp = a.p;
    a.p = b.p
    b.p = tmp;
}
</code></pre>
</blockquote>
<p>Das würde ich aber die Klasse selbst übernehmen lassen, um die Kapselung zu erhalten (siehe mein oberes Beispiel). Von aussen kannst du immer noch eine globale <code>swap()</code> -Funktion bereitstellen:</p>
<pre><code class="language-cpp">void swap(test_wrapper&amp; lhs, test_wrapper&amp; rhs)
{
    lhs.swap(rhs);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1814875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814875</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 29 Nov 2009 11:28:53 GMT</pubDate></item></channel></rss>