<?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[Suche in Listen]]></title><description><![CDATA[<p>Hallo, ich habe folgendes Programm:</p>
<p>dekl.</p>
<pre><code class="language-csharp">#ifndef dekl_h
#define dekl_h

#include &lt;iostream.h&gt;
#include &lt;conio.h&gt;

class Klasse;

class Klasse
{

private:
        struct Knoten
        {
        int Inhalt;
        Knoten * pNext;
        };

        Knoten *pFirst;
        Knoten *pLast;
        int Anzahl;
public:
        Klasse();
        Klasse(const Klasse &amp;obj);
        ~Klasse();

        void push_front(int obj);
        void push_place(int obj,int place);
        void push_back(int obj);
        void pop_front();
        void pop_place(int place);
        void pop_back();
        int get_front();
        int get_back();

        friend ostream&amp; operator&lt;&lt;(ostream &amp;os, Klasse &amp;obj);
        friend istream&amp; operator&gt;&gt;(istream &amp;is, Klasse &amp;obj);

        void KlasseAusgeben();
};

#endif
</code></pre>
<p>impl.</p>
<pre><code class="language-csharp">#include &quot;dekl.h&quot;

Klasse::Klasse()
{
        Anzahl = 0;
        pFirst = pLast = NULL;
}

//Kopierkonstruktor
Klasse::Klasse(const Klasse &amp;obj)
{
  this-&gt;Anzahl = 0;
  pFirst = pLast = NULL;

  Knoten *ptemp = obj.pFirst;
  for(int anz = obj.Anzahl; anz != 0; anz --)
  {
   this-&gt;push_front(ptemp-&gt;Inhalt);
   ptemp = ptemp-&gt;pNext;
  }
 }

// Dekonsturktor

Klasse::~Klasse()
{
        Knoten *ptemp = pFirst;
        for (; Anzahl &gt;0; Anzahl--)
        {
                pFirst = pFirst-&gt;pNext;
                delete ptemp;
                ptemp = pFirst;
        }
}

// Einfuegen vorne

void Klasse::push_front(int obj)
{
        if(Anzahl==NULL)         // wenn noch keiner da ist...
        {
                pFirst = new Knoten;      // Zeiger wird auf Speicheradresse festgelegt...
                pFirst-&gt;Inhalt = obj;     // wird objekt in speicher geschrieben
                pFirst-&gt;pNext = NULL;     // da wir nur 1 Knoten besitzen, wird der Next Zeiger NULL gesetzt
                pLast = pFirst;           // da nur 1, ist der letzte gleich dem ersten
        }
        else                               // wenn die Anzahl nicht 0 ist
        {                                  // Knoten ist die Strucktu innerhalb der Klasse...
                Knoten *pNew = new Knoten; // Erstellen eines neuen Zeigers, und zuweissung des Speichers
                pNew-&gt;Inhalt = obj;        // Neuer Knoten wird über Zeiger PNew mit Inhalt gefühlt--&gt;Obj
                pNew-&gt;pNext = pFirst;      // Der PNext Zeiger vom vorne einzufügenden Knoten soll den &quot;ehemaligen pFirst &quot;ersten&quot; Konoten zeigen
                pFirst = pNew;             // Der neue Knoten wird der erste Knoten der Liste...
        }
        Anzahl ++;
}

// An Postition einfügen

void Klasse::push_place(int obj, int place)
{
        if(Anzahl==NULL)
        {
                pFirst = new Knoten;
                pFirst-&gt;Inhalt = obj;
                pFirst-&gt;pNext = NULL;
                pLast = pFirst;
        }

        if(Anzahl&lt;=place &amp;&amp; Anzahl!=NULL)
        {
                Knoten *pNew = new Knoten;
                pNew-&gt;Inhalt = obj;
                pNew-&gt;pNext = NULL;
                pNew-&gt;pNext = pNew;
                pLast = pNew;
        }

        if(Anzahl&gt;place &amp;&amp; Anzahl!=NULL &amp;&amp; place &gt; -1)
        {
                Knoten *pNew = new Knoten;
                pNew-&gt;Inhalt = obj;
                pNew-&gt;pNext = NULL;

                if(place == 0)
                {
                        pNew-&gt;pNext = pFirst;
                        pFirst = pNew;
                }
                else
                {
                        Knoten*ptemp = pFirst;
                        for(; place &gt; 1;place--)
                                ptemp=ptemp-&gt;pNext;

                        pNew-&gt;pNext = ptemp-&gt;pNext;
                        ptemp-&gt;pNext = pNew;
                }
        }
        Anzahl++;
}

// hinten hinhaengen

void Klasse::push_back(int obj)
{
        if(Anzahl==NULL)
        {
                pFirst = new Knoten;         // Gleich wie einfuegen vorne...da Anzahl = 0, d.h. nix in Liste...
                pFirst-&gt;Inhalt = obj;
                pFirst-&gt;pNext = NULL;
                pLast = pFirst;
        }
        else
        {
                Knoten *pNew = new Knoten;    // neuer Speicher für Knoten..zeiger zeigt druff
                pNew-&gt;Inhalt = obj;           // Inhalt wird eingefügt
                pNew-&gt;pNext = NULL;           // da hinten angefügt, wird der Zeige auf das Nächste 0 gesetzt...
                pLast-&gt;pNext = pNew;          //
                pLast = pNew;                 // der neue wird dem letzten zugewiesen
        }
        Anzahl++;
}

// lustiges löschen des ersten Elementes

void Klasse::pop_front()
{
        if(Anzahl == 1)
        {
        cout&lt;&lt;&quot;Erstes Klassenelement &quot;&lt;&lt;pFirst-&gt;Inhalt&lt;&lt;&quot; geloescht! &quot;&lt;&lt;endl&lt;&lt;endl;
         delete pFirst;
         pFirst = pLast = NULL;
         Anzahl = 0;
        }
        if (Anzahl &gt; 1)
        {
        cout&lt;&lt;&quot;Erstes Klassenelement &quot;&lt;&lt;pFirst-&gt;Inhalt&lt;&lt;&quot; geloescht! &quot;&lt;&lt;endl&lt;&lt;endl;
         Knoten *ptemp = pFirst;
         pFirst = pFirst-&gt;pNext;
         delete ptemp;
         Anzahl--;
         }
}

// an genauer Postition löschen

void Klasse::pop_place(int place)
{
  if(Anzahl==NULL)
  {
        cout&lt;&lt;&quot;Klasse ist leer! &quot;;
  }

  if((Anzahl-1) &lt;= place &amp;&amp; Anzahl != NULL)
  {
     this-&gt;pop_back();
     Anzahl--;
  }

  if((Anzahl -1) &gt; place &amp;&amp; Anzahl != NULL &amp;&amp; place &gt; -1)
  {
        if(place == 0)
        {
         Knoten * ptemp = pFirst;
         pFirst = pFirst-&gt;pNext;
         delete ptemp;
        }
        else
        {
          Knoten *ptempV =pFirst;
          Knoten *ptempL =pFirst;

          for( ; place &gt;1;place--)
          ptempV = ptempV-&gt;pNext;

          ptempL = ptempV-&gt;pNext;
          ptempV-&gt;pNext = ptempV-&gt;pNext-&gt;pNext;

          delete ptempL;
        }
        Anzahl--;
  }
}

//letztes löschen

void Klasse::pop_back()
{
        if(Anzahl ==1)
        {
        cout&lt;&lt;&quot;Letztes Element &quot;&lt;&lt;pFirst-&gt;Inhalt&lt;&lt;&quot; wird gelöscht!&quot;&lt;&lt;endl;
         delete pFirst;
         pFirst= pLast = NULL;
         Anzahl = 0;
        }
        if(Anzahl &gt;1)
        {
        Knoten *ptemp= pFirst;
        while(ptemp-&gt;pNext != pLast)
        ptemp = ptemp-&gt;pNext;
        cout&lt;&lt;&quot;Letztes Klassenelement &quot;&lt;&lt;pLast-&gt;Inhalt&lt;&lt;&quot; geloescht! &quot;&lt;&lt;endl&lt;&lt;endl;

        delete pLast;
        pLast = ptemp;
        Anzahl--;
        }
}

// Zeige Erstes Element

int Klasse::get_front()
 {
 return pFirst-&gt;Inhalt;
 }

// letztes Element

int Klasse::get_back()
{
 return pLast-&gt;Inhalt;
}

// Klasse Ausgeben

void Klasse::KlasseAusgeben()
 {
  Knoten *ptemp = pFirst;
  cout&lt;&lt;&quot;Ausgabe der Klasse: &quot;&lt;&lt;endl&lt;&lt;endl;
  for(int anz = Anzahl; anz !=0; anz--)
   {
    cout&lt;&lt;ptemp-&gt;Inhalt&lt;&lt; &quot;   &quot;;
    ptemp = ptemp-&gt;pNext;
    }
 cout&lt;&lt;endl&lt;&lt;endl;
 }

//überladen von was auch immer

ostream&amp; operator&lt;&lt; (ostream &amp;os, Klasse &amp;obj)
{
 {
 if(obj.Anzahl == NULL)
 os&lt;&lt;&quot;Klasse Leer, lala...!&quot;&lt;&lt;endl&lt;&lt;endl;
 }

 os&lt;&lt;&quot;Ausgabe der Klasse mit Operator: &quot;&lt;&lt;endl&lt;&lt;endl;

 Klasse::Knoten *ptemp = obj.pFirst;
 for(int anz = obj.Anzahl; anz !=0; anz--)
  {
   os&lt;&lt;ptemp-&gt;Inhalt&lt;&lt;&quot;   &quot;;
   ptemp = ptemp-&gt;pNext;
  }
  os&lt;&lt;endl&lt;&lt;endl;
  return os;
};

istream&amp; operator&gt;&gt;(istream &amp;is, Klasse &amp;obj)
{
cout&lt;&lt;&quot;Eingabe: &quot;;
int temp;
is&gt;&gt;temp;
obj.push_back(temp);
return is;
}
</code></pre>
<p>main</p>
<pre><code class="language-csharp">#include &quot;impl.cpp&quot;

int main()
{
        Klasse L;

        L.push_front(33);
        L.push_front(23);
        L.push_front(45);
        L.push_front(66);
        L.push_front(22);
        L.push_front(11);
        L.push_back(44);
        L.push_back(55);
        L.push_back(66);

        cout&lt;&lt;L.get_front()&lt;&lt;endl;
        cout&lt;&lt;L.get_back()&lt;&lt;endl&lt;&lt;endl;
        L.KlasseAusgeben();
        cout&lt;&lt;endl;

        L.pop_front();
        L.KlasseAusgeben();
        cout&lt;&lt;endl;

        L.pop_back();
        L.KlasseAusgeben();
        cout&lt;&lt;endl;

        cout&lt;&lt;L;

        cin&gt;&gt;L;
        fflush(stdin);
        cout&lt;&lt;L;

        L.push_place(000,2);
        L.push_place(333,3);
        L.push_place(999,4);
        cout&lt;&lt;L;

        L.pop_place(0);
        cout&lt;&lt;L;
        L.pop_place(1);
        cout&lt;&lt;L;
        L.pop_place(4);
        cout&lt;&lt;L;

        Klasse L2(L);

        Klasse *pL3 = new Klasse(L2);

        pL3-&gt;pop_front();
        pL3-&gt;pop_back();
        L2.push_front(0);
        L.pop_front();

        cout&lt;&lt;L;
        cout&lt;&lt;L2;
        cout&lt;&lt;*pL3;

        cout&lt;&lt;&quot;Ende &quot;&lt;&lt;endl;
        getch();
        return 0;
}
</code></pre>
<p>Nun meine Frage:<br />
wie kann ich eine suche innerhalb der Liste realisieren?</p>
<p>Danke im voraus <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/topic/139217/suche-in-listen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 10:38:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139217.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 04 Mar 2006 15:31:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Suche in Listen on Sat, 04 Mar 2006 15:31:06 GMT]]></title><description><![CDATA[<p>Hallo, ich habe folgendes Programm:</p>
<p>dekl.</p>
<pre><code class="language-csharp">#ifndef dekl_h
#define dekl_h

#include &lt;iostream.h&gt;
#include &lt;conio.h&gt;

class Klasse;

class Klasse
{

private:
        struct Knoten
        {
        int Inhalt;
        Knoten * pNext;
        };

        Knoten *pFirst;
        Knoten *pLast;
        int Anzahl;
public:
        Klasse();
        Klasse(const Klasse &amp;obj);
        ~Klasse();

        void push_front(int obj);
        void push_place(int obj,int place);
        void push_back(int obj);
        void pop_front();
        void pop_place(int place);
        void pop_back();
        int get_front();
        int get_back();

        friend ostream&amp; operator&lt;&lt;(ostream &amp;os, Klasse &amp;obj);
        friend istream&amp; operator&gt;&gt;(istream &amp;is, Klasse &amp;obj);

        void KlasseAusgeben();
};

#endif
</code></pre>
<p>impl.</p>
<pre><code class="language-csharp">#include &quot;dekl.h&quot;

Klasse::Klasse()
{
        Anzahl = 0;
        pFirst = pLast = NULL;
}

//Kopierkonstruktor
Klasse::Klasse(const Klasse &amp;obj)
{
  this-&gt;Anzahl = 0;
  pFirst = pLast = NULL;

  Knoten *ptemp = obj.pFirst;
  for(int anz = obj.Anzahl; anz != 0; anz --)
  {
   this-&gt;push_front(ptemp-&gt;Inhalt);
   ptemp = ptemp-&gt;pNext;
  }
 }

// Dekonsturktor

Klasse::~Klasse()
{
        Knoten *ptemp = pFirst;
        for (; Anzahl &gt;0; Anzahl--)
        {
                pFirst = pFirst-&gt;pNext;
                delete ptemp;
                ptemp = pFirst;
        }
}

// Einfuegen vorne

void Klasse::push_front(int obj)
{
        if(Anzahl==NULL)         // wenn noch keiner da ist...
        {
                pFirst = new Knoten;      // Zeiger wird auf Speicheradresse festgelegt...
                pFirst-&gt;Inhalt = obj;     // wird objekt in speicher geschrieben
                pFirst-&gt;pNext = NULL;     // da wir nur 1 Knoten besitzen, wird der Next Zeiger NULL gesetzt
                pLast = pFirst;           // da nur 1, ist der letzte gleich dem ersten
        }
        else                               // wenn die Anzahl nicht 0 ist
        {                                  // Knoten ist die Strucktu innerhalb der Klasse...
                Knoten *pNew = new Knoten; // Erstellen eines neuen Zeigers, und zuweissung des Speichers
                pNew-&gt;Inhalt = obj;        // Neuer Knoten wird über Zeiger PNew mit Inhalt gefühlt--&gt;Obj
                pNew-&gt;pNext = pFirst;      // Der PNext Zeiger vom vorne einzufügenden Knoten soll den &quot;ehemaligen pFirst &quot;ersten&quot; Konoten zeigen
                pFirst = pNew;             // Der neue Knoten wird der erste Knoten der Liste...
        }
        Anzahl ++;
}

// An Postition einfügen

void Klasse::push_place(int obj, int place)
{
        if(Anzahl==NULL)
        {
                pFirst = new Knoten;
                pFirst-&gt;Inhalt = obj;
                pFirst-&gt;pNext = NULL;
                pLast = pFirst;
        }

        if(Anzahl&lt;=place &amp;&amp; Anzahl!=NULL)
        {
                Knoten *pNew = new Knoten;
                pNew-&gt;Inhalt = obj;
                pNew-&gt;pNext = NULL;
                pNew-&gt;pNext = pNew;
                pLast = pNew;
        }

        if(Anzahl&gt;place &amp;&amp; Anzahl!=NULL &amp;&amp; place &gt; -1)
        {
                Knoten *pNew = new Knoten;
                pNew-&gt;Inhalt = obj;
                pNew-&gt;pNext = NULL;

                if(place == 0)
                {
                        pNew-&gt;pNext = pFirst;
                        pFirst = pNew;
                }
                else
                {
                        Knoten*ptemp = pFirst;
                        for(; place &gt; 1;place--)
                                ptemp=ptemp-&gt;pNext;

                        pNew-&gt;pNext = ptemp-&gt;pNext;
                        ptemp-&gt;pNext = pNew;
                }
        }
        Anzahl++;
}

// hinten hinhaengen

void Klasse::push_back(int obj)
{
        if(Anzahl==NULL)
        {
                pFirst = new Knoten;         // Gleich wie einfuegen vorne...da Anzahl = 0, d.h. nix in Liste...
                pFirst-&gt;Inhalt = obj;
                pFirst-&gt;pNext = NULL;
                pLast = pFirst;
        }
        else
        {
                Knoten *pNew = new Knoten;    // neuer Speicher für Knoten..zeiger zeigt druff
                pNew-&gt;Inhalt = obj;           // Inhalt wird eingefügt
                pNew-&gt;pNext = NULL;           // da hinten angefügt, wird der Zeige auf das Nächste 0 gesetzt...
                pLast-&gt;pNext = pNew;          //
                pLast = pNew;                 // der neue wird dem letzten zugewiesen
        }
        Anzahl++;
}

// lustiges löschen des ersten Elementes

void Klasse::pop_front()
{
        if(Anzahl == 1)
        {
        cout&lt;&lt;&quot;Erstes Klassenelement &quot;&lt;&lt;pFirst-&gt;Inhalt&lt;&lt;&quot; geloescht! &quot;&lt;&lt;endl&lt;&lt;endl;
         delete pFirst;
         pFirst = pLast = NULL;
         Anzahl = 0;
        }
        if (Anzahl &gt; 1)
        {
        cout&lt;&lt;&quot;Erstes Klassenelement &quot;&lt;&lt;pFirst-&gt;Inhalt&lt;&lt;&quot; geloescht! &quot;&lt;&lt;endl&lt;&lt;endl;
         Knoten *ptemp = pFirst;
         pFirst = pFirst-&gt;pNext;
         delete ptemp;
         Anzahl--;
         }
}

// an genauer Postition löschen

void Klasse::pop_place(int place)
{
  if(Anzahl==NULL)
  {
        cout&lt;&lt;&quot;Klasse ist leer! &quot;;
  }

  if((Anzahl-1) &lt;= place &amp;&amp; Anzahl != NULL)
  {
     this-&gt;pop_back();
     Anzahl--;
  }

  if((Anzahl -1) &gt; place &amp;&amp; Anzahl != NULL &amp;&amp; place &gt; -1)
  {
        if(place == 0)
        {
         Knoten * ptemp = pFirst;
         pFirst = pFirst-&gt;pNext;
         delete ptemp;
        }
        else
        {
          Knoten *ptempV =pFirst;
          Knoten *ptempL =pFirst;

          for( ; place &gt;1;place--)
          ptempV = ptempV-&gt;pNext;

          ptempL = ptempV-&gt;pNext;
          ptempV-&gt;pNext = ptempV-&gt;pNext-&gt;pNext;

          delete ptempL;
        }
        Anzahl--;
  }
}

//letztes löschen

void Klasse::pop_back()
{
        if(Anzahl ==1)
        {
        cout&lt;&lt;&quot;Letztes Element &quot;&lt;&lt;pFirst-&gt;Inhalt&lt;&lt;&quot; wird gelöscht!&quot;&lt;&lt;endl;
         delete pFirst;
         pFirst= pLast = NULL;
         Anzahl = 0;
        }
        if(Anzahl &gt;1)
        {
        Knoten *ptemp= pFirst;
        while(ptemp-&gt;pNext != pLast)
        ptemp = ptemp-&gt;pNext;
        cout&lt;&lt;&quot;Letztes Klassenelement &quot;&lt;&lt;pLast-&gt;Inhalt&lt;&lt;&quot; geloescht! &quot;&lt;&lt;endl&lt;&lt;endl;

        delete pLast;
        pLast = ptemp;
        Anzahl--;
        }
}

// Zeige Erstes Element

int Klasse::get_front()
 {
 return pFirst-&gt;Inhalt;
 }

// letztes Element

int Klasse::get_back()
{
 return pLast-&gt;Inhalt;
}

// Klasse Ausgeben

void Klasse::KlasseAusgeben()
 {
  Knoten *ptemp = pFirst;
  cout&lt;&lt;&quot;Ausgabe der Klasse: &quot;&lt;&lt;endl&lt;&lt;endl;
  for(int anz = Anzahl; anz !=0; anz--)
   {
    cout&lt;&lt;ptemp-&gt;Inhalt&lt;&lt; &quot;   &quot;;
    ptemp = ptemp-&gt;pNext;
    }
 cout&lt;&lt;endl&lt;&lt;endl;
 }

//überladen von was auch immer

ostream&amp; operator&lt;&lt; (ostream &amp;os, Klasse &amp;obj)
{
 {
 if(obj.Anzahl == NULL)
 os&lt;&lt;&quot;Klasse Leer, lala...!&quot;&lt;&lt;endl&lt;&lt;endl;
 }

 os&lt;&lt;&quot;Ausgabe der Klasse mit Operator: &quot;&lt;&lt;endl&lt;&lt;endl;

 Klasse::Knoten *ptemp = obj.pFirst;
 for(int anz = obj.Anzahl; anz !=0; anz--)
  {
   os&lt;&lt;ptemp-&gt;Inhalt&lt;&lt;&quot;   &quot;;
   ptemp = ptemp-&gt;pNext;
  }
  os&lt;&lt;endl&lt;&lt;endl;
  return os;
};

istream&amp; operator&gt;&gt;(istream &amp;is, Klasse &amp;obj)
{
cout&lt;&lt;&quot;Eingabe: &quot;;
int temp;
is&gt;&gt;temp;
obj.push_back(temp);
return is;
}
</code></pre>
<p>main</p>
<pre><code class="language-csharp">#include &quot;impl.cpp&quot;

int main()
{
        Klasse L;

        L.push_front(33);
        L.push_front(23);
        L.push_front(45);
        L.push_front(66);
        L.push_front(22);
        L.push_front(11);
        L.push_back(44);
        L.push_back(55);
        L.push_back(66);

        cout&lt;&lt;L.get_front()&lt;&lt;endl;
        cout&lt;&lt;L.get_back()&lt;&lt;endl&lt;&lt;endl;
        L.KlasseAusgeben();
        cout&lt;&lt;endl;

        L.pop_front();
        L.KlasseAusgeben();
        cout&lt;&lt;endl;

        L.pop_back();
        L.KlasseAusgeben();
        cout&lt;&lt;endl;

        cout&lt;&lt;L;

        cin&gt;&gt;L;
        fflush(stdin);
        cout&lt;&lt;L;

        L.push_place(000,2);
        L.push_place(333,3);
        L.push_place(999,4);
        cout&lt;&lt;L;

        L.pop_place(0);
        cout&lt;&lt;L;
        L.pop_place(1);
        cout&lt;&lt;L;
        L.pop_place(4);
        cout&lt;&lt;L;

        Klasse L2(L);

        Klasse *pL3 = new Klasse(L2);

        pL3-&gt;pop_front();
        pL3-&gt;pop_back();
        L2.push_front(0);
        L.pop_front();

        cout&lt;&lt;L;
        cout&lt;&lt;L2;
        cout&lt;&lt;*pL3;

        cout&lt;&lt;&quot;Ende &quot;&lt;&lt;endl;
        getch();
        return 0;
}
</code></pre>
<p>Nun meine Frage:<br />
wie kann ich eine suche innerhalb der Liste realisieren?</p>
<p>Danke im voraus <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/1008564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008564</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Sat, 04 Mar 2006 15:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to Suche in Listen on Sat, 04 Mar 2006 17:16:42 GMT]]></title><description><![CDATA[<p>indem du die schleife durchläufst und den wert mit if vergleichst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008621</guid><dc:creator><![CDATA[DrGreenthumb]]></dc:creator><pubDate>Sat, 04 Mar 2006 17:16:42 GMT</pubDate></item><item><title><![CDATA[Reply to Suche in Listen on Sat, 04 Mar 2006 19:12:26 GMT]]></title><description><![CDATA[<p>Mr. Blonde schrieb:</p>
<blockquote>
<p>wie kann ich eine suche innerhalb der Liste realisieren?</p>
</blockquote>
<p>Am besten mit dem Standard-Algorithmus std::find bzw. std::find_if. Das setzt aber die Existenz von Standard-konformen Iteratoren voraus, die über Deine Liste laufen können.</p>
<p>Zum Beispiel so:</p>
<pre><code class="language-cpp">#include &lt;iterator&gt;     // iterator&lt;&gt;

class Klasse
{
private:
        struct Knoten
        {
        int Inhalt;
        Knoten * pNext;
        };

        Knoten *pFirst;
        Knoten *pLast;
        int Anzahl;
public:
    class Iterator;
    friend Iterator;
    class Iterator : public std::iterator&lt; std::forward_iterator_tag, int &gt;
    {
    public:
        explicit Iterator( Knoten* p = 0 ) : m_p( p ) {}
        // --   Inkrement
        Iterator&amp; operator++() 
        {
            m_p = m_p-&gt;pNext;
            return *this;
        }
        Iterator operator++( int )
        {
            Iterator tmp( *this );
            this-&gt;operator++();
            return tmp;
        }
        // --   Vergleich
        bool operator==( const Iterator&amp; b ) const
        {
            return m_p == b.m_p;
        }
        bool operator!=( const Iterator&amp; b ) const
        {
            return !(*this == b);
        }
        // --   Element Zugriff
        int&amp; operator*() const
        {
            return m_p-&gt;Inhalt;
        }
        int* operator-&gt;() const
        {
            return &amp;(m_p-&gt;Inhalt);
        }
    private:
        Knoten* m_p;
    };
    typedef Iterator iterator;

    Iterator begin() { return Iterator( pFirst ); }
    Iterator end() { return Iterator(); }

        Klasse();
        Klasse(const Klasse &amp;obj);
        ~Klasse();
    // usw. wie gepostet
</code></pre>
<p>Die Anwendung 'Suchen' geht dann wie folgt:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;    // std::find
#include &lt;iostream&gt;

int main()
{
    using namespace std;
    Klasse l;
    l.push_back( 9 );
    l.push_back( 7 );
    Klasse::iterator i = std::find( l.begin(), l.end(), 7 );
    if( i != l.end() )
    {
        cout &lt;&lt; &quot;Element &quot; &lt;&lt; *i &lt;&lt; &quot; gefunden&quot; &lt;&lt; endl;
    }
    return 0;
}
</code></pre>
<p>Der Vorteil von Iteratoren ist, dass dann auch andere std-Algorithmen wie z.B. find_if, distance, copy, min_element usw. mit Deiner Klasse zusammen arbeiten können.</p>
<p>Bem.: die Ableitung von std::iterator&lt; std::forward_iterator_tag, .. &gt; ist für die Algorithmen notwendig, wenn sie die Iterator-Kategorie ermitteln müssen; wie z.B. std::distance.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008703</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sat, 04 Mar 2006 19:12:26 GMT</pubDate></item></channel></rss>