<?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[Umfangreiche Lösungen für triviale Probleme - sinnvoll?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Ich habe den Beitrag von Firefighter gelesen, hier:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1635770.html#1635770" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1635770.html#1635770</a></p>
<p>Dabei dachte ich: &quot;Das muss doch einfacher über die STD-Algorithmen gehen!&quot;<br />
Also Testprojekt geöffnet und angefangen rumzuwerkeln. Heraus kam der folgende Code:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

template
&lt;
	typename CharT,
	typename TraitsT = std::char_traits&lt;CharT&gt;,
	typename AllocatorT = std::allocator&lt;CharT&gt;
&gt;
struct BasicLine
{
	typedef std::basic_string&lt;CharT, TraitsT, AllocatorT&gt; Data;

	Data data;

	operator Data&amp;()
	{
		return data;
	}

	operator Data const&amp;() const
	{
		return data;
	}
};

typedef BasicLine&lt;char&gt; Line;
typedef BasicLine&lt;wchar_t&gt; WLine;

template
&lt;
	typename CharT,
	typename TraitsT,
	typename AllocatorT
&gt;
std::basic_istream&lt;CharT, TraitsT&gt;&amp;
operator &gt;&gt;(
	std::basic_istream&lt;CharT, TraitsT&gt;&amp; input,
	BasicLine&lt;CharT, TraitsT, AllocatorT&gt;&amp; line
	)
{
	return std::getline(input, line.data);
}

int main()
{
	std::vector&lt;std::string&gt; lines;

	std::ifstream file(&quot;C:/fpRedmon.log&quot;);

	std::copy(
		std::istream_iterator&lt;Line&gt;(file),
		std::istream_iterator&lt;Line&gt;(),
		std::back_inserter(lines)
		);

	return 0;
}
</code></pre>
<p>Ich wusste doch, dass es einf.... ehm ... dass es geht <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>
<p>Finde das immer wieder interessant, wie man sich mit den Standardalgorithmen wahnsinnig schnell verirren kann. Denn es ist klar, dass diese Lösung deutlich mehr kann, als die von Firefighter, aber grundsätzlich ist es völlig unnötig für das eigentliche Problem.</p>
<p>Mir ist das nun schon mehrfach aufgefallen, dass ich für kleine Probleme, riesige Lösungen gefunden habe, welche viel mehr lösen könnten, als nur das eine Problem.</p>
<p>Geht euch das manchmal auch so?<br />
Und als wie sinnvoll erachtet ihr solche Lösungen? Vor allem im Hinblick auf die Zukunft. Habt ihr schon erlebt, dass solche grössere Lösungen euch später geholfen haben?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230416/umfangreiche-lösungen-für-triviale-probleme-sinnvoll</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 02:17:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230416.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Dec 2008 14:36:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Fri, 26 Dec 2008 14:36:42 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Ich habe den Beitrag von Firefighter gelesen, hier:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1635770.html#1635770" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1635770.html#1635770</a></p>
<p>Dabei dachte ich: &quot;Das muss doch einfacher über die STD-Algorithmen gehen!&quot;<br />
Also Testprojekt geöffnet und angefangen rumzuwerkeln. Heraus kam der folgende Code:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

template
&lt;
	typename CharT,
	typename TraitsT = std::char_traits&lt;CharT&gt;,
	typename AllocatorT = std::allocator&lt;CharT&gt;
&gt;
struct BasicLine
{
	typedef std::basic_string&lt;CharT, TraitsT, AllocatorT&gt; Data;

	Data data;

	operator Data&amp;()
	{
		return data;
	}

	operator Data const&amp;() const
	{
		return data;
	}
};

typedef BasicLine&lt;char&gt; Line;
typedef BasicLine&lt;wchar_t&gt; WLine;

template
&lt;
	typename CharT,
	typename TraitsT,
	typename AllocatorT
&gt;
std::basic_istream&lt;CharT, TraitsT&gt;&amp;
operator &gt;&gt;(
	std::basic_istream&lt;CharT, TraitsT&gt;&amp; input,
	BasicLine&lt;CharT, TraitsT, AllocatorT&gt;&amp; line
	)
{
	return std::getline(input, line.data);
}

int main()
{
	std::vector&lt;std::string&gt; lines;

	std::ifstream file(&quot;C:/fpRedmon.log&quot;);

	std::copy(
		std::istream_iterator&lt;Line&gt;(file),
		std::istream_iterator&lt;Line&gt;(),
		std::back_inserter(lines)
		);

	return 0;
}
</code></pre>
<p>Ich wusste doch, dass es einf.... ehm ... dass es geht <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>
<p>Finde das immer wieder interessant, wie man sich mit den Standardalgorithmen wahnsinnig schnell verirren kann. Denn es ist klar, dass diese Lösung deutlich mehr kann, als die von Firefighter, aber grundsätzlich ist es völlig unnötig für das eigentliche Problem.</p>
<p>Mir ist das nun schon mehrfach aufgefallen, dass ich für kleine Probleme, riesige Lösungen gefunden habe, welche viel mehr lösen könnten, als nur das eine Problem.</p>
<p>Geht euch das manchmal auch so?<br />
Und als wie sinnvoll erachtet ihr solche Lösungen? Vor allem im Hinblick auf die Zukunft. Habt ihr schon erlebt, dass solche grössere Lösungen euch später geholfen haben?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635780</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 26 Dec 2008 14:36:42 GMT</pubDate></item><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Fri, 26 Dec 2008 14:47:21 GMT]]></title><description><![CDATA[<p>Schöne Lösung Dravere, auch wenn ich nicht alles verstanden habe,was ich gestehen muss. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Aber ich kenne dein Problem auch sehr gut. Man will ein Projekt schreiben und zerbricht sich den Kopf wie man das am besten <strong>universell</strong> lösen kann. Natürlich schießt dann manchmal mti Kanonen auf Spatzen, aber es hat einen Vorteil, sobal das eigentlich Problem komplexer wird, hat man schon einen Ansatz der eventuell sogar schon das neue komplexe Problem lösen kann.Ich denke es zeigt programmiertechnisches können, wenn man selbst triviale Probleme mit komplexen Ansätzen lösen kann und somit die Lösung auch für andere(gleiche) nur schwerer Problemstellungen nutzen kann. Meine Meinung <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/1635782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635782</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Fri, 26 Dec 2008 14:47:21 GMT</pubDate></item><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Fri, 26 Dec 2008 18:51:46 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Mir ist das nun schon mehrfach aufgefallen, dass ich für kleine Probleme, riesige Lösungen gefunden habe, welche viel mehr lösen könnten, als nur das eine Problem.</p>
<p>Geht euch das manchmal auch so?<br />
Und als wie sinnvoll erachtet ihr solche Lösungen? Vor allem im Hinblick auf die Zukunft. Habt ihr schon erlebt, dass solche grössere Lösungen euch später geholfen haben?</p>
</blockquote>
<p>ich gebe zu, dass ich auch dazu tendiere.<br />
Ich finde diese Art Lösungen immer genau dann sinnvoll, wenn ihre einzelnen Komponenten bestimmte 'allgemein gültige' Schnittstellen zur Verfügung stellen. Mit 'allgemein gültig' meine ich die Schnittstellen, die im Standard definiert sind. Und das sind oft Iterator und Stream (also istream und ostream und die Templateform).<br />
Das stellt sicher, dass man sie mit anderen Komponenten, entweder bestehende aus dem Standard, oder andere selbst erstellte kombinieren kann. Und erst das macht ihre Wiederverwendbarkeit aus.</p>
<p>Das mag zwar umfangreich im Sinne von 'viele Zeilen Code' aussehen, aber überhaupt nicht kompliziert; es fällt auf, dass weder eine Abfrage (if) noch eine Schleife (for,while,..) in Deinem Code auftauchen. Das macht ihn 'ganz einfach'.</p>
<p>Firefighter schrieb:</p>
<blockquote>
<p>Schöne Lösung Dravere, auch wenn ich nicht alles verstanden habe,was ich gestehen muss.</p>
</blockquote>
<p>.. vorausgesetzt man versteht C++ vollständig, und damit auch die Template-Syntax und z.B. istream_iterator&lt;&gt; und Co. <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>
<p>Auch wenn ich es in diesem speziellen Fall es etwas über das Ziel hinausgeschossen empfinde, lässt sich Deine Lösung sofort für die Lösung des <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1635770.html#1635770" rel="nofollow">nächsten erwähnten Problems</a> einsetzen:</p>
<p>morbius schrieb:</p>
<blockquote>
<p>Hätte jetzt noch ne Frage. Ich lese ja ein File ein. Gibt es nun eine Methode, um zu prüfen, ob irgendwo ein &quot;[blabla_xyz]&quot; vorkam? Denn wenn ich das finden könnte, muss ich in die nächste Zeile springen. Wie würde ich das machen?</p>
</blockquote>
<p>Steht der Ausdruck allein in der Zeile, so sollte diese Stelle mit</p>
<pre><code class="language-cpp">find( std::istream_iterator&lt;Line&gt;(file), std::istream_iterator&lt;Line&gt;(), string(&quot;[blabla_xyz]&quot;) );
</code></pre>
<p>zu finden sein.</p>
<p>Im Allgemeinen habe ich die Erfahrung gemacht, dass diese Art des Vorgehens unter anderem den Vorteil hat, dass der entstandene Code weniger Fehler enthält, die man erst zur Laufzeit bemerkt. Es ist gerade bei Templates oft mühsam, es durch den Compiler zu bringen, aber wenn's dann erstmal so weit ist, dann ist der Code auch oft gleich korrekt.</p>
<p>:xmas2: Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635844</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 26 Dec 2008 18:51:46 GMT</pubDate></item><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Fri, 26 Dec 2008 21:02:28 GMT]]></title><description><![CDATA[<p>Naja, sagen wir mal so... Ich würde sicherlich, zumindest im ersten Anlauf, genau so etwas schreiben wie Firefighter. Einfache Lösungen für einfache Probleme <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>
<p>Ich mag zwar die STL-Algorithmen mit ihrer eher funktionalen Art zu programmieren sehr gerne, aber ich weiß halt auch, wie schnell man sich damit in irgendwelchen unnötig komplizierten Konstrukten verlaufen kann (was m.M.n. weniger ein Problem mit der Herangehensweise an sich ist, als vielmehr eine Schwäche der Sprache).</p>
<p>Andererseits sehe ich allerdings auch den Vorteil von Draveres Lösung, zumal man sowas ja wirklich immer wieder gebrauchen kann. Eigentlich wundert es mich sogar sehr, daß weder STL noch Boost oder sonstwer eine einfache Lösung für das zeilenweise Iterieren über eine Datei mitbringen.</p>
<p>Hat vielleicht mal jemand versucht, sowas mittels Boost.Iterator zu lösen? Ich dachte eigentlich, daß damit eine halbwegs einfache Lösung möglich sein sollte, aber irgendwie scheint mir selbst da kein wirklich passender Adapter dabei zu sein. Vielleicht habe ich auch nur das Entscheidende übersehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635897</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Fri, 26 Dec 2008 21:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Sat, 27 Dec 2008 16:24:50 GMT]]></title><description><![CDATA[<p>Das hab ich manchmal auch, diesen Zwang, alles &quot;sauber&quot; lösen zu wollen. Also möglichst viel STL und maximale Kapselung etc. <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>
<p>Oft sieht es nachher so aus, dass ich für irgendein <code>std::find()</code> oder <code>std::for_each()</code> zusätzliche Konstrukte bastle, um eine Ein-Zeilen-Lösung zu haben. Dabei wäre doch eine Schleife viel einfacher gewesen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636180</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 27 Dec 2008 16:24:50 GMT</pubDate></item><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Mon, 02 Feb 2009 10:20:31 GMT]]></title><description><![CDATA[<p>Ich wollte hier mal nach einem Link fragen, der einem so tiefen Wissen vermittelt, dass man auch solche Sachen alleine kommen kann.<br />
Denn allein über die Doku oder die üblichen Tutorials/Bücher hätte ich so was nicht hinbekommen.<br />
Oder ist das einfach nur Erfahrung bzw. viel lesen der Implementierungen der std-container?</p>
<p>Danke<br />
Franz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656399</guid><dc:creator><![CDATA[franz]]></dc:creator><pubDate>Mon, 02 Feb 2009 10:20:31 GMT</pubDate></item><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Mon, 02 Feb 2009 10:22:33 GMT]]></title><description><![CDATA[<p>franz schrieb:</p>
<blockquote>
<p>Ich wollte hier mal nach einem Link fragen, der einem so tiefen Wissen vermittelt, dass man auch solche Sachen alleine kommen kann.<br />
Denn allein über die Doku oder die üblichen Tutorials/Bücher hätte ich so was nicht hinbekommen.<br />
Oder ist das einfach nur Erfahrung bzw. viel lesen der Implementierungen der std-container?</p>
<p>Danke<br />
Franz</p>
</blockquote>
<p>Ich denke mal es ist einfach nur Jahre lange Erfahrung und viel viel viel Selbstsudium <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/1656400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656400</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 02 Feb 2009 10:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Mon, 02 Feb 2009 11:14:43 GMT]]></title><description><![CDATA[<p>franz schrieb:</p>
<blockquote>
<p>Denn allein über die Doku oder die üblichen Tutorials/Bücher hätte ich so was nicht hinbekommen.</p>
</blockquote>
<p>Kommt ganz drauf an was man unter &quot;übliche Tutorials/Bücher&quot; versteht. Mit der &quot;üblichen&quot; Anfängerlektüre kommt man sicher nicht so ohne weiteres darauf. Wenn man sich aber über die fortgeschrittene Lektüre wie z.B. die Exceptional C++-Reihe von Herb Sutter, den C++ Templates-Guide von Josuttis/Vandervoorde, Modern C++ von Alexandrescu und ein paar Dokus zu einzelnen Boost-Bibliotheken hergemacht hat und sich dabei die darin enthaltenen Ideen und Vorgehensweisen verinnerlicht hat, dann kommt man auch auf solche Verallgemeinerungen.</p>
<p>Firefighter schrieb:</p>
<blockquote>
<p>Ich denke mal es ist einfach nur Jahre lange Erfahrung und viel viel viel Selbstsudium <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>Jahre vielleicht nicht, aber doch sicher ein paar Monate, angefangen bei kleinen Verallgemeinerungen und schrittweisem Vorantasten. Inklusive den Stellen wo man sich völlig verzettelt und aus einem &quot;unschönen, uneleganten&quot; Vierzeiler einen eleganten Einzeiler macht mit Hilfe einer Template-Verallgemeinerung die 6 STL-Header und 80 Zeilen Code braucht <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/1656424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656424</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:14:43 GMT</pubDate></item><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Mon, 02 Feb 2009 11:28:51 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Wenn man sich aber über die fortgeschrittene Lektüre wie z.B. die Exceptional C++-Reihe von Herb Sutter, den C++ Templates-Guide von Josuttis/Vandervoorde, Modern C++ von Alexandrescu und ein paar Dokus zu einzelnen Boost-Bibliotheken hergemacht hat und sich dabei die darin enthaltenen Ideen und Vorgehensweisen verinnerlicht hat, dann kommt man auch auf solche Verallgemeinerungen.</p>
</blockquote>
<p>Danke, dann weiß ich ja was ich mir hol wenn mal wieder Geld da ist...<br />
Müssen jetzt erstmal die Boost-Dokus usw. herhalten.<br />
Hab auch grad gesehen dass in meinem<br />
&quot;Thinking in C++, 2nd ed. Volume 2&quot;<br />
auch einiges zu templates drinnen steht.</p>
<p>Ansonsten danke für die Tips!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656434</guid><dc:creator><![CDATA[franz]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to Umfangreiche Lösungen für triviale Probleme - sinnvoll? on Mon, 02 Feb 2009 17:44:10 GMT]]></title><description><![CDATA[<p>franz schrieb:</p>
<blockquote>
<p>Hab auch grad gesehen dass in meinem<br />
&quot;Thinking in C++, 2nd ed. Volume 2&quot;<br />
auch einiges zu templates drinnen steht.</p>
</blockquote>
<p>Das ist im Vergleich zu dem, was Alexandrescu macht ziemlich Anfängermässig. <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/1656717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656717</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 02 Feb 2009 17:44:10 GMT</pubDate></item></channel></rss>