<?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[Liste in C++]]></title><description><![CDATA[<p>Hi</p>
<p>in C implementiert man Listen mit Pointern. Macht man das in C++ auch oder benutzt man hier Referenzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268468/liste-in-c</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 17:53:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268468.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Jun 2010 15:29:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Liste in C++ on Wed, 09 Jun 2010 15:29:46 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>in C implementiert man Listen mit Pointern. Macht man das in C++ auch oder benutzt man hier Referenzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909541</guid><dc:creator><![CDATA[Studentxyz]]></dc:creator><pubDate>Wed, 09 Jun 2010 15:29:46 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Wed, 09 Jun 2010 15:32:04 GMT]]></title><description><![CDATA[<p>Eine verkettete Liste nur mit Referenzen umzusetzen, halte ich für schwierig. Du kannst es ja mal versuchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909542</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 09 Jun 2010 15:32:04 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Wed, 09 Jun 2010 15:37:20 GMT]]></title><description><![CDATA[<p>ProgChild schrieb:</p>
<blockquote>
<p>Eine verkettete Liste nur mit Referenzen umzusetzen, halte ich für schwierig. Du kannst es ja mal versuchen.</p>
</blockquote>
<p>ich würde so gar mal behuapten wollen, dass es nicht geht : P</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909545</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 09 Jun 2010 15:37:20 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Wed, 09 Jun 2010 15:37:53 GMT]]></title><description><![CDATA[<p>ProgChild schrieb:</p>
<blockquote>
<p>Eine verkettete Liste nur mit Referenzen umzusetzen, halte ich für schwierig. Du kannst es ja mal versuchen.</p>
</blockquote>
<p>Das halte ich sogar für unmöglich, schließlich können Referenzen sich nicht ändern. Man könnte so bestenfalls eine konstante Liste implementieren. Wäre aber auch ziemlich umständlich, weil Referenzen auch nicht Null sein können, was aber für Anfang und Ende ganz praktisch wäre. Da muss man sich dann was anderes für ausdenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909547</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Jun 2010 15:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Wed, 09 Jun 2010 16:30:20 GMT]]></title><description><![CDATA[<p>Ich dachte, man könnte da etwas mit unions und placement new machen, aber Referenzen sind wirklich eisenhart - sie lassen sich gar nicht erst in eine union stecken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909603</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Wed, 09 Jun 2010 16:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Wed, 09 Jun 2010 17:18:51 GMT]]></title><description><![CDATA[<p>Da ich das ganze ganz lustig fand ist hier zumindest mal ein Ansatz:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

struct ref_list
{
  int data;
  ref_list &amp; next;
  ref_list(unsigned int i): next((i&gt;0) ? (*(new ref_list(i-1))):(*this)), data(i) {}

};

int main()
{
  ref_list foo(3);
  std::cout &lt;&lt; foo.data &lt;&lt; foo.next.data &lt;&lt; foo.next.next.data &lt;&lt; foo.next.next.next.data &lt;&lt; foo.next.next.next.next.data &lt;&lt; std::endl;
}
</code></pre>
<p>Es sollte leicht möglich sein, der Liste bei ihrer Erstellung auch vernünftige Daten mitzugeben anstatt dem langweiligen Durchzählen das ich hier benutzt habe. Ein Iterator sollte sich auch schreiben lassen. Und dann hat man eine Liste konstanter Länge, was natürlich eine sehr sinnvolle Anwendung für eine verkettete Liste ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> . Aber nett zu sehen, dass so etwas überhaupt geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909635</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Jun 2010 17:18:51 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Wed, 09 Jun 2010 18:04:30 GMT]]></title><description><![CDATA[<p>Alles was du in C gemacht hast, kannst du in C++ unverändert beibehalten und weiter so machen. Nur weil du jetzt C++ einsetzen willst, brauchst du nichts grundlegend anderes zu suchen. Effektiver wird es auch nicht. Manchmal sparst du gegenüber reinem C etwas Programmieraufwand oder gewinnst mehr Sicherheit, mehr nicht. Wo sich das lohnt, musst du selbst herausfinden. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909660</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Wed, 09 Jun 2010 18:04:30 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Wed, 09 Jun 2010 20:13:14 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p>Alles was du in C gemacht hast, kannst du in C++ unverändert beibehalten und weiter so machen. Nur weil du jetzt C++ einsetzen willst, brauchst du nichts grundlegend anderes zu suchen. Effektiver wird es auch nicht. Manchmal sparst du gegenüber reinem C etwas Programmieraufwand oder gewinnst mehr Sicherheit, mehr nicht. Wo sich das lohnt, musst du selbst herausfinden. :p</p>
</blockquote>
<p>Das stimmt zwar prinzipiell, allerdings sollte man noch hinzufügen, dass man das nicht zum Anlass nehmen sollte, alle bekannten Programmiertechniken aus C in C++ weiterzuverwenden, ohne sich nach Alternativen umzuschauen.<br />
C++ bietet für viele Konstrukte wesentlich abstraktere und effizientere (lies: wartbarerer, lesbarere, sicherere) Ausdrucksmöglichkeiten als C (schönes Beispiel ist RAII). Wenn man diese Möglichkeiten ignoriert und nur seine Algorithmus in Klassen packt, landet man bei &quot;C mit Klassen&quot;, was hier im Forum oft (und zu Recht) als kein guter C++-Stil bezeichnet wird.</p>
<p>Um beim Beispiel zu bleiben: Die C++-Standardbibliothek bietet mit <code>std::list</code> eine performante, generische, sichere Implemetierung einer verketteten Liste, die effizient den Speicher selbst verwaltet und damit mögliche Fehlerquellen wie händische Allokationen vermeidet.<br />
Außer zu Übungszwecken gibt es deswegen in einem Großteil der Fälle in C++ keinen Grund, eine Liste selbst zu implementieren. Neben möglichen Fehlerrisiken sowohl bei Implementierung als auch bei Nutzung wird man in eigentlich allen Fällen gegenüber <code>std::list</code> keinerlei Performanceverbesserungen haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909687</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Wed, 09 Jun 2010 20:13:14 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Thu, 10 Jun 2010 18:25:03 GMT]]></title><description><![CDATA[<p>Ich habe mal SeppJs Idee verfeinert und eine Möglichkeit für eine Referenz-Liste gefunden, der man dynamisch zur Laufzeit Elemente hinzufügen kann.<br />
Das Handling ist allerdings ein Krampf und möglich wird das überhaupt erst durch einen Hack über placement new, der wahrscheinlich nicht standardkonform ist. Kurzum: eine nette akademische Übung, aber in der Praxis eigentlich unbrauchbar.</p>
<p>Wie dem auch sei, der zu verfeinernde Ansatz:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

class ref_list
{
	static ref_list* really_end;
	ref_list* end;

public:

	int data;
	ref_list&amp; next;

	ref_list(int d, ref_list&amp; n) : data(d), end(really_end), next(n) {}
	ref_list(int d) : data(d), end(new ref_list(0, *really_end)), next(*end) {}

	void push_back(int data)
	{
		if(&amp;next != end)
			next.push_back(data);
		else
		{
			end = new ref_list(0, *ref_list::really_end);
			new (&amp;next) ref_list(data);
		}
	}
};

ref_list* ref_list::really_end = new ref_list(0, *ref_list::really_end);  // Keine Ahnung, ob sowas möglich ist, aber es scheint zu funktionieren (VS 2008)

int main()
{
	ref_list foo(0);
	foo.push_back(1);
	foo.push_back(2);
	foo.push_back(3);
	std::cout &lt;&lt; foo.data &lt;&lt; foo.next.data &lt;&lt; foo.next.next.data &lt;&lt; foo.next.next.next.data &lt;&lt;
		foo.next.next.next.next.data &lt;&lt; foo.next.next.next.next.next.data &lt;&lt; std::endl;
}

// Ausgabe: 012300
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1909706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909706</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Thu, 10 Jun 2010 18:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Thu, 10 Jun 2010 10:31:13 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>Das stimmt zwar prinzipiell, allerdings sollte man noch hinzufügen, dass man das nicht zum Anlass nehmen sollte, alle bekannten Programmiertechniken aus C in C++ weiterzuverwenden, ohne sich nach Alternativen umzuschauen ....</p>
</blockquote>
<p>Das stimmt vollkommen! Ist aber für Umsteiger von C nach C++ ein Lernprozess. Man muss eben verstehen und ausprobieren, was die erweiterten Techniken von C++ an vereinfachter Programmierung und mehr Sicherheit bieten. Und dann sollte man es auch nutzen! 'C mit Klassen' ist für Umsteiger aber schon mal ein guter Einstieg. Um beim Beispiel mit Listen zu bleiben, handelt es sich um vorbereitete Klassen, die man einfach verwenden kann und die mehr bieten als man in C selbst oder nur mit grossem Aufwand hätte realisieren können. :p</p>
<p>Jeder Compiler ist eine Sammlung von Werkzeugen zur Programmierung. Ich sträube mich dagegen, jedes bessere Werkzeug auch einsetzen zu müssen. Wenn dies die Entwickler bei der Einführung von C++ mit einem Bruch zum alten C gemacht hätten, wären nur wenige seinerzeit auf C++ umgestiegen.</p>
<p>Ich möchte jetzt keine neue Diskussion C versus C++. Die hatten wir hier schon zur Genüge! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909929</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Thu, 10 Jun 2010 10:31:13 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Thu, 10 Jun 2010 11:16:19 GMT]]></title><description><![CDATA[<p>Studentxyz schrieb:</p>
<blockquote>
<p>Hi</p>
<p>in C implementiert man Listen mit Pointern. Macht man das in C++ auch oder benutzt man hier Referenzen?</p>
</blockquote>
<p>Man implementiert i.d.R. in C++ gar nichts selbst, sondern benutzt <code>std::list</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909953</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 10 Jun 2010 11:16:19 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Thu, 10 Jun 2010 11:24:51 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Studentxyz schrieb:</p>
<blockquote>
<p>Hi</p>
<p>in C implementiert man Listen mit Pointern. Macht man das in C++ auch oder benutzt man hier Referenzen?</p>
</blockquote>
<p>Man implementiert i.d.R. in C++ gar nichts selbst, sondern benutzt <code>std::list</code> .</p>
</blockquote>
<p>Naja, hängt davon ab, was man macht. Man benutzt i.d.R nicht std::list, sondern std::vector oder std::queue. Oder gleich Datenbenaken. Oder eigene Listen. Also std::list eigentlich nicht.<br />
Mal eine Liste zu schreiben, ist sicherlich eine gute Übung zum Umgang mit Zeigern/Referenzen/Handles/Verweisen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909955</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 10 Jun 2010 11:24:51 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Fri, 11 Jun 2010 12:22:54 GMT]]></title><description><![CDATA[<p>Liste fuer Referenzen: Wird ein Wert veraendert, so wird nicht der Dateninhalt kopiert oder mit placement new ersetzt, sonder man konstruiert ein neues Listenelement (Referenz ueber Initialisierungsliste setzen) und fuegt es an der entsprechenden Stellen ein. So aehnlich wird es in funktionalen Sprachen gemacht.</p>
<blockquote>
<p>Man implementiert i.d.R. in C++ gar nichts selbst, sondern benutzt std::list .. Man benutzt i.d.R nicht std::list, sondern std::vector oder std::queue</p>
</blockquote>
<p>Was ihr so fuer Regeln habt, viel zu viele fuer meinen Geschmack. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1910449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1910449</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 11 Jun 2010 12:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to Liste in C++ on Fri, 11 Jun 2010 12:19:09 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Was ihr so fuer Regeln habt, viel zu viele fuer meinen Geschmack. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Ich kenne eigentlich nur eine Regel: 'Schnell, sicher, effizient, und leicht wartbar eine konkrete Zielsetzung realisieren!' Aber genau da unterscheiden sich manchmal die Denkweisen und damit die Programmierstile. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1910662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1910662</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Fri, 11 Jun 2010 12:19:09 GMT</pubDate></item></channel></rss>