<?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 for-Schleifen und Vektoren...]]></title><description><![CDATA[<p>Hallo, ich muss für die Uni eine art Routenplaner erstellen. Habe auch schon das Hauptprogramm zur suchen von Routen von ner Internetseite. Jetzt muss ich nurnoch die Routen aus der Datenbank für den Suchalgorithmus formatieren.</p>
<p>Die Funktion mit der ich ein Problem habe soll jede Route aus der Datenbank durchgehen und in einen Vektor jede vorhandene Stadt genau einmal schreiben. Leider kommt es beim ausführen der Funktion zu Problemen. Teste ich sie mit der kompletten Datenbank (ca.15 Datensätze) stürzt das Programm ohne Fehlermeldung beim ausführen der Funktion ab. Mit 2-3 Testdatensätzen lief die Funktion durch, hat allerdings Städte doppelt in den Vektor geschrieben. Ich dachte ja erst, dass vielleicht die Variable &quot;vorhanden&quot; in der Schleife verschattet wird, das scheint aber doch nich der Fall zu sein... Ich hoffe hier kann mir jemand helfen weil ich mich schon seit mehreren Stunden mit dem Problem rumschlage und keine Lösung finde...</p>
<p>Hier ist der Code:</p>
<p>Route ist ein Feld mit den Bestandteilen: Ort1, Ort2 (beides String), Entfernung, Geschwindigkeit (beides Float)<br />
Routen ist ein Vektor aus Route</p>
<pre><code>//Erzeugt für jede Stadt in der Datenbank einen Knoten
std::vector&lt;std::string&gt; erstelle_knoten(const Routen &amp;allerouten) {
    Route r;
    std::vector&lt;std::string&gt; knoten_namen; //Hier wird jeder Stadtnamen genau einmal als Knoten angelegt
    for(unsigned int i=0; i&lt;allerouten.size(); i++){ //Die Schleife wird für jede vorhandene Route einmal durchlaufen
      bool vorhanden=0; //Route schon vorhanden wird (wieder) auf &quot;nein&quot; gesetzt
      for (unsigned int j=0; j-1&lt;knoten_namen.size(); j++){ //Schleife wird für jeden vorhandenen Knoten genau einmal durchlaufen
          if(allerouten[i].ort1() == knoten_namen[j]) vorhanden=1; //Wenn zu einer Stadt schon ein Knoten existiert wird vorhanden auf &quot;ja&quot; gesetzt
      }
      if (vorhanden == 0) knoten_namen.push_back(allerouten[i].ort1()); //Wenn noch kein Knoten zur Stadt existiert wird einer erstellt

    }
    //Das Gleiche nochmal für den 2. Ort (&quot;Zielort&quot;) in jeder Route da er ja nicht automatisch auch als 1. Ort vorhanden sein muss
    for(unsigned int i=0; i&lt;allerouten.size(); i++){
      bool vorhanden=0;
      for (unsigned int j=0; j&lt;knoten_namen.size(); j++){
          if(allerouten[i].ort2() == knoten_namen[j]) vorhanden=1;
      }
      if (vorhanden == 0) knoten_namen.push_back(allerouten[i].ort2());
    }
    return knoten_namen;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/176367/problem-mit-for-schleifen-und-vektoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 13:26:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176367.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Mar 2007 16:00:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit for-Schleifen und Vektoren... on Tue, 20 Mar 2007 16:03:42 GMT]]></title><description><![CDATA[<p>Hallo, ich muss für die Uni eine art Routenplaner erstellen. Habe auch schon das Hauptprogramm zur suchen von Routen von ner Internetseite. Jetzt muss ich nurnoch die Routen aus der Datenbank für den Suchalgorithmus formatieren.</p>
<p>Die Funktion mit der ich ein Problem habe soll jede Route aus der Datenbank durchgehen und in einen Vektor jede vorhandene Stadt genau einmal schreiben. Leider kommt es beim ausführen der Funktion zu Problemen. Teste ich sie mit der kompletten Datenbank (ca.15 Datensätze) stürzt das Programm ohne Fehlermeldung beim ausführen der Funktion ab. Mit 2-3 Testdatensätzen lief die Funktion durch, hat allerdings Städte doppelt in den Vektor geschrieben. Ich dachte ja erst, dass vielleicht die Variable &quot;vorhanden&quot; in der Schleife verschattet wird, das scheint aber doch nich der Fall zu sein... Ich hoffe hier kann mir jemand helfen weil ich mich schon seit mehreren Stunden mit dem Problem rumschlage und keine Lösung finde...</p>
<p>Hier ist der Code:</p>
<p>Route ist ein Feld mit den Bestandteilen: Ort1, Ort2 (beides String), Entfernung, Geschwindigkeit (beides Float)<br />
Routen ist ein Vektor aus Route</p>
<pre><code>//Erzeugt für jede Stadt in der Datenbank einen Knoten
std::vector&lt;std::string&gt; erstelle_knoten(const Routen &amp;allerouten) {
    Route r;
    std::vector&lt;std::string&gt; knoten_namen; //Hier wird jeder Stadtnamen genau einmal als Knoten angelegt
    for(unsigned int i=0; i&lt;allerouten.size(); i++){ //Die Schleife wird für jede vorhandene Route einmal durchlaufen
      bool vorhanden=0; //Route schon vorhanden wird (wieder) auf &quot;nein&quot; gesetzt
      for (unsigned int j=0; j-1&lt;knoten_namen.size(); j++){ //Schleife wird für jeden vorhandenen Knoten genau einmal durchlaufen
          if(allerouten[i].ort1() == knoten_namen[j]) vorhanden=1; //Wenn zu einer Stadt schon ein Knoten existiert wird vorhanden auf &quot;ja&quot; gesetzt
      }
      if (vorhanden == 0) knoten_namen.push_back(allerouten[i].ort1()); //Wenn noch kein Knoten zur Stadt existiert wird einer erstellt

    }
    //Das Gleiche nochmal für den 2. Ort (&quot;Zielort&quot;) in jeder Route da er ja nicht automatisch auch als 1. Ort vorhanden sein muss
    for(unsigned int i=0; i&lt;allerouten.size(); i++){
      bool vorhanden=0;
      for (unsigned int j=0; j&lt;knoten_namen.size(); j++){
          if(allerouten[i].ort2() == knoten_namen[j]) vorhanden=1;
      }
      if (vorhanden == 0) knoten_namen.push_back(allerouten[i].ort2());
    }
    return knoten_namen;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1249221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249221</guid><dc:creator><![CDATA[winfer]]></dc:creator><pubDate>Tue, 20 Mar 2007 16:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit for-Schleifen und Vektoren... on Tue, 20 Mar 2007 16:15:09 GMT]]></title><description><![CDATA[<p>formatier mal deinen code besser... ein paar leerzeilen, nich alles so eng beieinander geschriebven, da sieht ja keiner mehr durch.</p>
<p>für sowas:</p>
<pre><code class="language-cpp">bool vorhanden = false;
for(int i = 0; i &lt; v.size(); i++)
{
  if(v[i] == &quot;zusuchendes&quot;)
    vorhanden = true;
}

// machst du besser das:
bool vorhanden = (std::find(v.begin(), v.end(), &quot;zusuchendes&quot;) != v.end());
</code></pre>
<p>Dann räumst erstmal auf und dann findet sich der fehler sicherlich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249227</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Tue, 20 Mar 2007 16:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit for-Schleifen und Vektoren... on Tue, 20 Mar 2007 20:18:15 GMT]]></title><description><![CDATA[<p>Hallo, danke erstmal für die Antwort, wenn ich es so mache gehts ohne Absturz. Jetzt stürzt er allerdings in einer anderen beteiligten Funktion ab <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="😉"
    /> Vielleicht kann nochmal jemand drüber schauen und sagen was ich anders machen sollte bzw wo der Fehler ist...</p>
<pre><code class="language-cpp">const Routen routensuche(const std::string &amp;startort, const std::string &amp;zielort, const std::string &amp;suchtyp, const Routen &amp;allerouten)
{
    Routen gefundeneRouten;
    std::vector&lt;std::string&gt; knoten_namen = erstelle_knoten(allerouten);
    adjacency_map_t adjacency_map = erstelle_karte(knoten_namen, suchtyp, allerouten); //Erstellt eine Verbindungsnetzkarte

    std::map&lt;vertex_t, weight_t&gt; min_distance;
    std::map&lt;vertex_t, vertex_t&gt; previous;
    //Startknotennummer suchen
    unsigned int startknoten=0;
    while (knoten_namen[startknoten] != startort and startknoten &lt; knoten_namen.size()) startknoten++;
    DijkstraComputePaths(startknoten, adjacency_map, min_distance, previous); //Algorithmus der die kürzesten Routen zu allen möglichen Zielpunkten sucht und speichert

    //Zielknotennummer suchen
    unsigned int zielknoten=0;
      while(knoten_namen[zielknoten] != zielort and zielknoten &lt; knoten_namen.size()) zielknoten++;

    //Gesamtroute in route r schreiben
    if(suchtyp == &quot;entfernung&quot;) {Route r(startort,zielort,min_distance[zielknoten],0); //für kürzeste Distanz
                                 gefundeneRouten.push_back(r);}
    else {Route r(startort,zielort,0,min_distance[zielknoten]); //für kürzeste Durchschnittsgeschwindigkeit
          gefundeneRouten.push_back(r);} //Schreibt die gesamtroute in gefundeneRouten

//Hier tritt wahrscheinlich der Fehler auf...
    //Die Teilrouten in gefundeneRouten schreiben
    Routen teilrouten; //uebernimmt die gefundene Route als Routen
    Route teilroute; //gefundene Route wird hier gespeichert und spaeter in routen geschrieben
    //Teilknoten finden
    unsigned int anzahlTeilstuecke = 0;
    //Die folgende Funktion soll die Teilabschnitte finden und speichern
    std::list&lt;vertex_t&gt; path = DijkstraGetShortestPathTo(zielknoten, previous);
    std::list&lt;vertex_t&gt;::iterator path_iter = path.begin();
        for( ; path_iter != path.end(); path_iter++)
        {
            anzahlTeilstuecke += 1; //Zaehlt die Teilstuecke der Strecke
            std::string knoten_vorher; //wird benoetigt um die Route zum Teilstueck aus der Datenbank zu suchen
            if(anzahlTeilstuecke == 1) knoten_vorher = startort; //Wenn erste Teilroute beginne mit Startort
            else knoten_vorher = knoten_namen[(*path_iter - 1)]; //Wenn nicht dann Stadtname der letzten Teilroute
            teilrouten = rt2-&gt;suchen(knoten_namen[*path_iter], knoten_vorher); //sucht die Route zu den beiden Orten aus der Datenbank
            teilroute = teilrouten[0];
            gefundeneRouten.push_back(teilroute);
        }
    return gefundeneRouten;
}
</code></pre>
<p>Der Suchalgorithmus und seine Funktionen sind von <a href="http://en.literateprograms.org/Dijkstra's_algorithm_(C_Plus_Plus)" rel="nofollow">http://en.literateprograms.org/Dijkstra's_algorithm_(C_Plus_Plus)</a> und wurden im Prinziep nicht verändert. Das Problem ist eben die Anpassung an die Schnittstellen und das automatische Erstellen der Knoten und Adjastanz Karte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249391</guid><dc:creator><![CDATA[winfer]]></dc:creator><pubDate>Tue, 20 Mar 2007 20:18:15 GMT</pubDate></item></channel></rss>