<?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[STL Vector erase]]></title><description><![CDATA[<p>Hallo,</p>
<p>Warum werden bei folgendem Programm die gelöschgten sätze nicht ausgegeben, obwohl die Ausgabe vor dem Löschen erfolgt?</p>
<pre><code># include           &lt;iostream&gt;
# include           &lt;string&gt;
# include           &lt;vector&gt;
using namespace     std;

class person
   {
   private:
      string        mFirstname;
      string        mLastname;

   public:

                    person (string fn, string ln) : mFirstname (fn), mLastname (ln) {};
                    person () {};
      void          printPerson (void)
         {
         cout &lt;&lt; mFirstname &lt;&lt; &quot; &quot; &lt;&lt; mLastname &lt;&lt; endl;
         }
      string        getFirstname () { return mFirstname; }
      string        getLastname () { return mLastname; }
   };

int                 main (int argc, char ** argv)
   {
   vector&lt;person&gt;           personen;
   vector&lt;person&gt;::iterator pit;
   string                   fname;

   personen.push_back (person (&quot;Klaus&quot;, &quot;Müller&quot;));
   personen.push_back (person (&quot;Erwin&quot;, &quot;Meier&quot;));
   personen.push_back (person (&quot;Sieghard&quot;, &quot;Rupp&quot;));
   personen.push_back (person (&quot;Jochen&quot;, &quot;Senft&quot;));
   personen.push_back (person (&quot;Ulrike&quot;, &quot;Kranwinkel&quot;));
   personen.push_back (person (&quot;Sabine&quot;, &quot;Burghard&quot;));
   for (pit = personen.begin (); pit != personen.end (); pit++)
      {
      pit-&gt;printPerson ();
      fname = pit-&gt;getFirstname ();
      if ((fname.compare (&quot;Erwin&quot;) == 0) || (fname.compare (&quot;Jochen&quot;) == 0))
         {
         pit = personen.erase (pit);
         }
      }
   cout &lt;&lt; &quot;           -----   schnipp -----       &quot; &lt;&lt; endl;
   for (pit = personen.begin (); pit != personen.end (); pit++)
      {
      pit-&gt;printPerson ();
      }
   return 0;
   }
</code></pre>
<p>Wenn ich in einer ersten Schleife nur ausgebe, in einer weiteren löschen und dann wieder ausgebe, ist alles OK.</p>
<p>Gruss Henrik</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/258071/stl-vector-erase</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 14:53:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258071.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Jan 2010 12:09:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 12:09:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Warum werden bei folgendem Programm die gelöschgten sätze nicht ausgegeben, obwohl die Ausgabe vor dem Löschen erfolgt?</p>
<pre><code># include           &lt;iostream&gt;
# include           &lt;string&gt;
# include           &lt;vector&gt;
using namespace     std;

class person
   {
   private:
      string        mFirstname;
      string        mLastname;

   public:

                    person (string fn, string ln) : mFirstname (fn), mLastname (ln) {};
                    person () {};
      void          printPerson (void)
         {
         cout &lt;&lt; mFirstname &lt;&lt; &quot; &quot; &lt;&lt; mLastname &lt;&lt; endl;
         }
      string        getFirstname () { return mFirstname; }
      string        getLastname () { return mLastname; }
   };

int                 main (int argc, char ** argv)
   {
   vector&lt;person&gt;           personen;
   vector&lt;person&gt;::iterator pit;
   string                   fname;

   personen.push_back (person (&quot;Klaus&quot;, &quot;Müller&quot;));
   personen.push_back (person (&quot;Erwin&quot;, &quot;Meier&quot;));
   personen.push_back (person (&quot;Sieghard&quot;, &quot;Rupp&quot;));
   personen.push_back (person (&quot;Jochen&quot;, &quot;Senft&quot;));
   personen.push_back (person (&quot;Ulrike&quot;, &quot;Kranwinkel&quot;));
   personen.push_back (person (&quot;Sabine&quot;, &quot;Burghard&quot;));
   for (pit = personen.begin (); pit != personen.end (); pit++)
      {
      pit-&gt;printPerson ();
      fname = pit-&gt;getFirstname ();
      if ((fname.compare (&quot;Erwin&quot;) == 0) || (fname.compare (&quot;Jochen&quot;) == 0))
         {
         pit = personen.erase (pit);
         }
      }
   cout &lt;&lt; &quot;           -----   schnipp -----       &quot; &lt;&lt; endl;
   for (pit = personen.begin (); pit != personen.end (); pit++)
      {
      pit-&gt;printPerson ();
      }
   return 0;
   }
</code></pre>
<p>Wenn ich in einer ersten Schleife nur ausgebe, in einer weiteren löschen und dann wieder ausgebe, ist alles OK.</p>
<p>Gruss Henrik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833565</guid><dc:creator><![CDATA[khenrik]]></dc:creator><pubDate>Wed, 06 Jan 2010 12:09:12 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 12:18:01 GMT]]></title><description><![CDATA[<p>Du wunderst dich echt, dass in deiner zweiten Schleife nichts ausgegeben wird?!?<br />
Tip: erase() löscht das Element. Nach deiner ersten Schleife ist der vector leer.<br />
Jetzt alles klar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833580</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or@off]]></dc:creator><pubDate>Wed, 06 Jan 2010 12:18:01 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 14:10:11 GMT]]></title><description><![CDATA[<p>Oops, sry...<br />
War zu überhastet geantwortet.<br />
Hab das pit-&gt;printPerson() in der ersten Schleife übersehen, ebenso wie die compare()s</p>
<p>Ich hab das bei mir mal ausprobiert, und es klappt eigentlich, bis auf einen Punkt:<br />
In der ersten Schleife werden Sieghard und Ulrike nicht ausgegeben. Grund:</p>
<blockquote>
<p><strong>Return value</strong><br />
A random access iterator pointing to the new location of the element that followed the last element erased by the function call, which is the vector end if the operation erased the last element in the sequence.</p>
</blockquote>
<p>Quelle: <a href="http://cplusplus.com/reference/stl/vector/erase/" rel="nofollow">http://cplusplus.com/reference/stl/vector/erase/</a><br />
Da deine for-Schleife automatisch inkrementiert, wird dieser eine Eintrag übersprungen.<br />
Lösung: while-Schleife:</p>
<pre><code class="language-cpp">vector&lt;person&gt;::iterator pit=personen.begin();
while(pit != personen.end()) {
    pit-&gt;printPerson ();
    fname = pit-&gt;getFirstname ();
    if ((fname.compare (&quot;Erwin&quot;) == 0) || (fname.compare (&quot;Jochen&quot;) == 0))
    {
        pit = personen.erase (pit);
    }
    else ++pit;
}
</code></pre>
<p>//edit: Deklaration von pit mit eingefügt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833594</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Wed, 06 Jan 2010 14:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 12:54:36 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-1819.html" rel="nofollow">rüdiger</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-5.html" rel="nofollow">Linux/Unix</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833610</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 06 Jan 2010 12:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 13:24:20 GMT]]></title><description><![CDATA[<p>Und noch was wichtiges: Rück deinen Code anständig ein. Das kann man nicht lesen und l'abra d'or hätte wahrscheinlich auch nicht so viel übersehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833631</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 06 Jan 2010 13:24:20 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 14:52:13 GMT]]></title><description><![CDATA[<p>Was gefällt Dir nicht an meiner Art der Einrückung? Ich rücke jeden Block um 3 Leerzeichen ein und schreibe die Öffnende Klammer genau da hin. Damit stehen öffnende und schliessende Klammer genau übereinander und Blockanfang und -ende sind gut erkennbar. Die andere Schreibweise mit den öffnenden Klammern finde ich weniger gut lesbar.</p>
<p>Gruss Henrik</p>
<p>P.S. Umgangston</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833709</guid><dc:creator><![CDATA[khenrik]]></dc:creator><pubDate>Wed, 06 Jan 2010 14:52:13 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 15:14:58 GMT]]></title><description><![CDATA[<p>khenrik schrieb:</p>
<blockquote>
<p>Was gefällt Dir nicht an meiner Art der Einrückung? Ich rücke jeden Block um 3 Leerzeichen ein und schreibe die Öffnende Klammer genau da hin. Damit stehen öffnende und schliessende Klammer genau übereinander und Blockanfang und -ende sind gut erkennbar. Die andere Schreibweise mit den öffnenden Klammern finde ich weniger gut lesbar.</p>
</blockquote>
<p>drakon meint wohl den liberalen Gebrauch von Leerzeichen in deinem Code. Wichtige Dinge stehen viel zu weit auseinander.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833738</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 06 Jan 2010 15:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 15:20:40 GMT]]></title><description><![CDATA[<p>Ok, das hat mehr Konsistenz, als ich zuerst drin gesehen habe.<br />
Nichts desto trotz sieht es schreklich aus! Eine solche eigentümliche Einrückung ist unüblich und imo recht unlesbar. Vor allem wird dir das wohl kaum eine IDE so hinlegen. <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="😉"
    /> - Du machst dir also recht Mühe beim einrücken, wobei man sich bei einer anständigen IDE meist treiben lassen kann und das automatisch erledigen lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833747</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 06 Jan 2010 15:20:40 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 15:20:48 GMT]]></title><description><![CDATA[<p>Ich hab's gerne ein bischen Luftiger und hatte mir bei der C Programmierung ein gewisses Spaltenschema angeeignet. Das lässt sich bei C++ nur bedingt durchhalten, aber ich versuch's trotzdem.</p>
<p>Erst mal Danke an alle nützlichen Beiträge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833748</guid><dc:creator><![CDATA[khenrik]]></dc:creator><pubDate>Wed, 06 Jan 2010 15:20:48 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 15:23:50 GMT]]></title><description><![CDATA[<p>khenrik schrieb:</p>
<blockquote>
<p>Ich hab's gerne ein bischen Luftiger und hatte mir bei der C Programmierung ein gewisses Spaltenschema angeeignet. Das lässt sich bei C++ nur bedingt durchhalten, aber ich versuch's trotzdem.</p>
<p>Erst mal Danke an alle nützlichen Beiträge.</p>
</blockquote>
<p>Ich würde dir empfehlen das nicht zu tun. Gewöhn dir am besten eine übliches Schema an. Ansonsten wird kaum jemand deinen Code lesen können/wollen und wenn du das einem Arbeitgeber zeigst, dann wird der auch nicht unbedingt Freude dran haben, respektive du musst so oder so einen üblichen Schreibstil angewöhnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833752</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 06 Jan 2010 15:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 15:33:12 GMT]]></title><description><![CDATA[<p>Das mit der Einrückung ist sicherlich Gewohnheitssache. Ich will halt (wie wohl die meisten) dass ein Block erkennbar da endet wo er beginnt, und das ist bei deiner Schreibweise leider nicht gegeben.</p>
<pre><code class="language-cpp">class person
    {
    };
</code></pre>
<p>Irgendwie denk ich da, ich hab nen Fehler reingebracht.<br />
Auch platzsparende Schreibweisen wie</p>
<pre><code class="language-cpp">if( predicate1 ) {
    doSomething(25);
} else {
    doSomething(35);
}

bool ok = false;
do {
    askForInput(&amp;ok);
} while( !ok );
</code></pre>
<p>sind schwerer leserlich:</p>
<pre><code class="language-cpp">if( predicate1 )
    {
    doSomething(25);
    } else {
    doSomething(35);
    }

bool ok = false;
do
    {
    askForInput(&amp;ok);
    } while( !ok );
</code></pre>
<p>Die Absätze sind nicht mehr getrennt, alles auf einer Ebene!<br />
Noch schlimmer wird es bei anonymen Blöcken, um temporäre Objekte sofort nach Verlassen wieder zu zerstören:</p>
<pre><code class="language-cpp">void fun(std::string&amp; str)
    {
    int var = 10;
        {
        std::stringstream s;
        s &lt;&lt; var;
        str = s.str();
        }
    }
</code></pre>
<p>Man sieht einfach den Absatz nicht ins Auge springen!</p>
<p>War vllt. jetzt etwas zu viel des Guten, aber ich hoffe du siehst, warum eigentlich jeder erst den Inhalt eines Blockes einrückt, nicht aber die Klammern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833769</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Wed, 06 Jan 2010 15:33:12 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase on Wed, 06 Jan 2010 16:14:08 GMT]]></title><description><![CDATA[<p>l'abra d'or schrieb:</p>
<blockquote>
<p>Das mit der Einrückung ist sicherlich Gewohnheitssache. Ich will halt (wie wohl die meisten) dass ein Block erkennbar da endet wo er beginnt, und das ist bei deiner Schreibweise leider nicht gegeben.</p>
</blockquote>
<p>Seine Schreibweise ist zwar nicht die übliche Form, aber durchaus auch in Natura anzutreffen (Wenn gleich ich aus den Projekten in denen ich bislang mitgewirkt habe, andere gewohnt bin). Selbst manche IDEs unterstützen (nach einiger Konfiguration) diesen Stil.</p>
<p>Ich würde sagen, die zwei üblichsten Stile sind folgende:</p>
<pre><code class="language-cpp">// 1.
class A {
};

int main() {
}

// 2.
class A
{
};

int main()
{
}
</code></pre>
<p>gerade wenn es um Unixsysteme geht, habe ich aber auch Stile gesehen, die dem OP durchaus nicht unüblich sind (von den vielen Leerzeichen einmal abgesehen). Varianten gibt es von allen, ich z.B. breche Teilweise auch Parameter um (Mit Einrückung) auch wenn es selten ist das man Code mal ausdruckt sehe ich lieber alle Parameter auch bei längeren Bezeichnern ohne seitlich Scrollen zu müssen.</p>
<p>Die vielen Leerzeichen gewöhnt man sich spätestens dann ab, wenn man auch gleich Kommentare zur Dokumentation (z.B. Doxygen) einsetzt (Die Dokumentation durchbricht nunmal die künstlichen Einrückung etwas).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833797</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 06 Jan 2010 16:14:08 GMT</pubDate></item></channel></rss>