<?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[Problem mit find_if in std:: list]]></title><description><![CDATA[<p>Code:</p>
<pre><code class="language-cpp">std::list&lt;CTimeEvent&gt;::iterator Prev_WorkEvent(std::list&lt;CTimeEvent&gt;::iterator itStart,UINT iType){

std::list&lt;CTimeEvent&gt;::iterator res= std::find_if(--itStart,m_lTimeEvents.begin(),std::mem_fun_ref(&amp;CTimeEvent::Used(iType)));
.
.
.
.
}
</code></pre>
<p>so sieht sie member funltion von CtimeEvent aus?</p>
<pre><code class="language-cpp">BOOL CTimeEvent::Used(UINT iType){
}
</code></pre>
<p>EDIT : muss glaub irgndowe bind1st oder bind2nd benutzen.. versteh das aber nich</p>
<p>P.S. Perfekt wäre es , wenn mit find_if einen &quot;NULL&quot; iterator liefern würde, wenn auf keines der elemente Used==true zutrifft</p>
<p>Fehler : illegal Call of an non-static function</p>
<p>muss die funtion statisch sein? ich rufe ja für jede TimeEvent die funktion Use auf, wenn diese true zurückgeben soll er mit den itereator zurückgeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195259/problem-mit-find_if-in-std-list</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 21:55:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195259.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Oct 2007 06:09:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:24:04 GMT]]></title><description><![CDATA[<p>Code:</p>
<pre><code class="language-cpp">std::list&lt;CTimeEvent&gt;::iterator Prev_WorkEvent(std::list&lt;CTimeEvent&gt;::iterator itStart,UINT iType){

std::list&lt;CTimeEvent&gt;::iterator res= std::find_if(--itStart,m_lTimeEvents.begin(),std::mem_fun_ref(&amp;CTimeEvent::Used(iType)));
.
.
.
.
}
</code></pre>
<p>so sieht sie member funltion von CtimeEvent aus?</p>
<pre><code class="language-cpp">BOOL CTimeEvent::Used(UINT iType){
}
</code></pre>
<p>EDIT : muss glaub irgndowe bind1st oder bind2nd benutzen.. versteh das aber nich</p>
<p>P.S. Perfekt wäre es , wenn mit find_if einen &quot;NULL&quot; iterator liefern würde, wenn auf keines der elemente Used==true zutrifft</p>
<p>Fehler : illegal Call of an non-static function</p>
<p>muss die funtion statisch sein? ich rufe ja für jede TimeEvent die funktion Use auf, wenn diese true zurückgeben soll er mit den itereator zurückgeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386032</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:24:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:32:47 GMT]]></title><description><![CDATA[<p>Ja, du brauchst dort bind2nd:</p>
<pre><code class="language-cpp">std::bind2nd(std::mem_fun_ref(&amp;CTimeEvent::Used),iType)
</code></pre>
<p>Zu deiner Zusatzfrage: find_if liefert das Bereichsende (das zweite Argument des Aufrufs) zurück, wenn es nichts gefunden hat (ist technsich einfacher umzusetzen als ein universeller NULL-Iterator).</p>
<p>PS: Aber den Anfang einer Liste (m_lTimeEvents.begin()) als Endmarke für einen STL-Algorithmus zu übergeben ist zumindest unklug (und afaik sogar undefiniert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386042</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:32:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:37:19 GMT]]></title><description><![CDATA[<p>Danke:)</p>
<p>die liste hat bei der erzeugung automatisch ein element, d.h. begin() existiert immer! wenn du das meinst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386045</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:37:19 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:41:12 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>die liste hat bei der erzeugung automatisch ein element, d.h. begin() existiert immer! wenn du das meinst</p>
</blockquote>
<p>Ich frage mich gerade auf welches Element der Iterator zeigen muss, wenn zwischen ihm und dem ersten Element (exklusiv!) noch Elemente liegen sollen. Denk da mal drüber nach <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/1386047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386047</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:45:18 GMT]]></title><description><![CDATA[<p>Nein, ich meinte damit, daß der zu durchsuchende Bereich falsch herum definiert ist - begin() ist der <strong>Anfang</strong> der list-Daten und den als <strong>Ende</strong> des durchsuchten Bereiches zu übergeben macht keinen Sinn.</p>
<p>(im günstigsten Fall zeigt iStart auf das zweite Element der Liste und du übergibst letztlich einen leeren Bereich, wahrscheinlicher ist da ein SegFault, weil du entweder <em>vor</em> dem erste Element startest (iStart==begin() - darf nicht dekrementiert werden) oder vom Startpunkt aus über das Listenende hinausrennst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386049</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:51:13 GMT]]></title><description><![CDATA[<p>die liste stellt events dar... das erste eventzeitpunkt ist zum zeitpunkt 0 definiert! wo bei da keine events anliegen!</p>
<p>A(0) &lt;- B(5) &lt;- C(8) &lt;- D(9) &lt;- usw.</p>
<p>Buchstanben sind die Elemente, die Zahl in der klammer ist der zweitliche abstand zum element davor! jedes element enthät event am entsprechenden zeitpunkt</p>
<p>Beim start wird das ersteevent-zeitpunkt A(0) ohne events erzeugt. Wenn alle events abgerabeitet wurden, wird automatisch B zum Ersten event! Wie eine ablaufkette</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386054</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:51:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:52:14 GMT]]></title><description><![CDATA[<p>kann ich mit find_if nicht rückwärst suchen? ja ich prüfe davor ab ob itStart != begin() ist!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386056</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:52:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:53:55 GMT]]></title><description><![CDATA[<p>Woher soll find_if wissen, dass Du rückwärts suchen willst? Eine Bedingung a la &quot;gehe wahlweise vorwärts oder rückwärts bis it == end&quot; kenne ich nicht <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>Du hast doch gestern noch nach reverse_iteratoren und so gefragt, ich hatte angenommen, Dir wäre klar, dass die Algorithmen vorwärts (sprich: mit ++) über die Iteratoren gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386058</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:53:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:58:44 GMT]]></title><description><![CDATA[<p>hmm. achso.. das ist blöd;) muss ich das wohl doch selber machen;)</p>
<p>ich will halt ne funktion mit der ich von einem bst. iterator aus nach recht oder links iterieren kann, bis ein best. iterator CTimeEvent::User(..)== TRUE ist!</p>
<p>musst ich wohl zwei funktionen schreiben</p>
<p>Das Problem ist, das begin () auf das erste existierende element der liste zeigt, und end() auf den iterator nach dem letzen element! so hab ich in beide richtungen untschiedliches verhalten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386062</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 06:57:52 GMT]]></title><description><![CDATA[<p>Ja, du kannst rückwärts suchen - indem du reverse_iteratoren verwendest:</p>
<pre><code class="language-cpp">res = std::find(reverse_iterator(iStart),m_lTimeEvents.rend(),...);
</code></pre>
<p>(rend() ist das Ende der invertierten Daten, zeigt also auf (genauer: vor) den Listen-Anfang)</p>
<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>ja ich prüfe davor ab ob itStart != begin() ist!</p>
</blockquote>
<p>Dann wirst du in den meisten Fällen von deiner Startposition aus in Richtung Listenende suchen - und darüber hinaus ins Daten-Nirvana.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386065</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 06:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 07:00:09 GMT]]></title><description><![CDATA[<p>ahhhh.. genau.. das meinte ich... dann zeigt rend() auf das imaginäre element vor dem ersten, umgekerht aquvivalent wie end() am ende der liste;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386068</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 07:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 07:19:31 GMT]]></title><description><![CDATA[<p>PRoblem:</p>
<pre><code class="language-cpp">std::list&lt;CTimeEvent&gt;::iterator Prev_WorkEvent(std::list&lt;CTimeEvent&gt;::iterator itStart,UINT iType){

		for(std::list&lt;CTimeEvent&gt;::reverse_iterator itStart(++itStart); itStart != m_lTimeEvents.rend(); ++itStart)
			if(itStart-&gt;Used(iType)) return std::list&lt;CTimeEvent&gt;::iterator(itStart);
		return NULL;
	}
</code></pre>
<p>beim return value &quot;Can not konvert reverse_iterator to iterator? wieso nich anderesherum gehts doch auc</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386085</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 07:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 07:23:28 GMT]]></title><description><![CDATA[<p>Es gibt keine implizite Umwandlung von reverse_iteratoren zu &quot;normalen&quot; Iteratoren - wenn du zurückgehen willst, kannst du die Methode base() verwenden.</p>
<p>(wobei - bei deiner handgeschriebenen for-Schleife kannst du auch normale Iteratoren nehmen und dekrementieren ;))</p>
<p>PS: Die Umwandlung von NULL in einen list-Iterator ist auch fragwürdig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386088</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 07:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 07:37:21 GMT]]></title><description><![CDATA[<p>oh man so ne scheisse... ich hasse es wenn man was programmiert und es gefällt einen nich:)</p>
<p>P.S:.: rend() == begin()-&gt; also zeigt nicht auf das element davor..</p>
<p>P.P.S: ich muss das mit NULL machen, weil es ja anscheiden kein iteartor vor dem ersten element gibt nur einen nach dem letzten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386096</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 07:37:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 07:40:31 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>P.S:.: rend() == begin()-&gt; also zeigt nicht auf das element davor..</p>
</blockquote>
<p>Bei reverse-Iteratoren mußt du unterscheiden zwischen physikalischer Position und logischer Position (auf letztere greifst du zu, wenn du den RI dereferenzierst).<br />
Zur Erklärung: Laut Standard gibt es zwar einen Iterator hinter das letzte Container-Element (end() - ist gültig, aber nicht dereferenzierbar), aber keinen Iterator <em>vor</em> das erste Element, deshalb verweisen reverse-Iteratoren physisch auf die Position hinter ihrer logischen Position (rbegin() zeigt physisch auf end() und logisch auf das letzte Element, rend() physisch auf begin() und logisch vor den Datenanfang).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386103</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 07:40:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 07:41:27 GMT]]></title><description><![CDATA[<p>ich will einfach nur von ein best. Postion aus (iterator) einfach nach links bzw. nach recht nach dem ersten vorkommenden element mit Used==true iterieren können... aber das ganze scheint nich so einfach zu sein. um eine elegante lösung zu finden!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386104</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 07:41:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 07:46:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::list&lt;CTimeEvent&gt;::iterator Prev_WorkEvent(std::list&lt;CTimeEvent&gt;::iterator itStart, UINT iType) {
    std::list&lt;CTimeEvent&gt;::reverse_iterator start( itStart );
    std::list&lt;CTimeEvent&gt;::reverse_iterator end( m_lTimeEvents.rend() );
    for ( ; start != end; ++start ) {
        if ( start-&gt;Used( iType ) ) return start.base();
    }
    return m_lTimeEvents.end();
}
</code></pre>
<p>So?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386105</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 16 Oct 2007 07:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 07:50:23 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>ich will einfach nur von ein best. Postion aus (iterator) einfach nach links bzw. nach recht nach dem ersten vorkommenden element mit Used==true iterieren können... aber das ganze scheint nich so einfach zu sein. um eine elegante lösung zu finden!</p>
</blockquote>
<p>Und wovon hängt es ab, ob du nach links oder rechts gehen willst? Im Zweifelsfall gehst du sowohl nach vorn als auch nach hinten und entscheidest dich dann, welchen der (maximal 2) gefundenen Werte du zurückgeben willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386108</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 07:50:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 07:55:19 GMT]]></title><description><![CDATA[<p>ja so ungefähr.. das problem ist hierbei, wenn itStart( Startposition) den Used==true ist, wird diese zurückgegebe!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: ich will einmal das erste vorkommen (itertor) mit dem gleichen typ (used==true) finden in beide richtungen! diese iterator speicher ich dann im element von der startpositon aus, und kann dann direkt zum nächsteh elemt springen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386109</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 16 Oct 2007 07:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit find_if in std:: list on Tue, 16 Oct 2007 10:51:55 GMT]]></title><description><![CDATA[<p>Die Funktion dort (unten) *edit* oben soll aber nur nach vorne suchen, oder wie? Da hast du doch mit find() schon die Zielposition gefunden und mußt nur noch unterscheiden, ob sie gültig ist:</p>
<pre><code class="language-cpp">pos = find(reverse_iterator(iStart),m_list.rend(),...);
if(pos!=m_list.rend())
{
  //gefunden
  list&lt;...&gt;::iterator tmp = pos.base();//physische Position des gefundenen Iterators
  --tmp;                               //umrechnen auf logische Position
  return tmp;
}
else
{
  return m_list.end();
}
</code></pre>
<p>(die Suche nach hinten ist da einfacher: <code>return find(iStart,m_list.end(),...);</code> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386141</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Oct 2007 10:51:55 GMT</pubDate></item></channel></rss>