std::vector<std::vector<Segment<T> > >



  • Hey,
    wenn man auf die Segmente zugreifen möchte kann man das so machen:

    for( std::vector<std::vector<Segment<T> > >::iterator iter1 = polygon1.begin();iter1 != polygon1.end();iter1++)
    	{
    
    		for( std::vector<Segment<T> >::iterator iterAussenS = (*iter1).begin();iterAussenS != (*iter1).end() ;iterAussenS++)
    		{				//Segment1
    

    ABER: ich möchte es mit 2 einfachen for schleifen machen... aber wie macht man das?

    for (int j=0;j<polygon2.size();j++){
    

    kann mir einer helfen?

    Mit freundlichem Gruß

    82kolu



  • Tip: mache dir typedefs für deine vectoren und ggf. für die Elemente:

    typedef Segment<T> Segment_t; //ok, den kann man evtl. weglassen...
    typedef std::vector<Segment_t> SegmentArray;
    typedef std::vector<SegmentArray> ArraySammlung;  //such dir einen passenden Namen...
    
    ArraySammlung dieSammlung;
    /* ... */
    
    for (unsigned i = 0; i < dieSammlung.size(); ++i)
    {
      auto& currentArray = dieSammlung[i];
      for (unsigned j = 0; j < currentArray.size(); ++j)
      {
        auto& segment = currentArray[j];
        /* ... */
      }
    }
    

    (Warum auch immer du auf Iteratoren verzichten möchtest)



  • Na ja, also wenn du auto schon hast..

    for (auto i = std::begin(zeug); i != std::end(zeug); ++i) 
    {
      for (auto j = ..
    }
    


  • cooky451 schrieb:

    Na ja, also wenn du auto schon hast..

    Er wollte "einfache" for-Schleifen. Dem Beispiel-Code hab ich entnommen, dass für ihn "einfach" == Zählindex statt Iteratoren 😉



  • Ach so, jetzt so du es sagst. :xmas1:



  • pumuckl schrieb:

    Tip: mache dir typedefs für deine vectoren und ggf. für die Elemente:

    typedef Segment<T> Segment_t; //ok, den kann man evtl. weglassen...
    typedef std::vector<Segment_t> SegmentArray;
    typedef std::vector<SegmentArray> ArraySammlung;  //such dir einen passenden Namen...
    
    ArraySammlung dieSammlung;
    /* ... */
    
    for (unsigned i = 0; i < dieSammlung.size(); ++i)
    {
      auto& currentArray = dieSammlung[i];
      for (unsigned j = 0; j < currentArray.size(); ++j)
      {
        auto& segment = currentArray[j];
        /* ... */
      }
    }
    

    (Warum auch immer du auf Iteratoren verzichten möchtest)

    wunderbar funktioniert



  • Hey da entsteht bei mir ein neues Problem.

    Ich habe 2 Polygonzüge, die ich auf schnittpunkte prüfe.
    von dem ersten Polygonzug erzeuge ich gleich ein polygonzug mit geteilten kanten bei schnittpunkten.
    beim 2ten Polygonzug hab ich jetzt die schnittpunkte in ner map abgespeichert.

    MapType.insert(std::pair<int, Vector3<T> >(l, resultIntersect));
    

    int: z.B: int=4 => im 4ten Segment ist ein Schnittpunkt.
    Vector3<T> Koordinaten des schnittpunkts.

    da in den segmenten 1,2,3 keine schnittpunkte mit dem ersten polygonzug waren möchte ich diese 3 segmente in ein neuen polygonzug speichern den 4ten dann an Vector3<T> geteilt usw....

    mein problem ist es wie ich das machen kann?
    Bin dankbar für jeden tip



  • Naja:

    1. nimm die Elemente bis zum ersten/nächsten Index in der map aus dem originalen Polygonzug, schmeiße sie in den neuen Polygonzug.
    2. Teile das nächste Element an der Stelle, die in der map gekennzeichnet ist. Schmeiße die Ergebnisse in den neuen Polygonzug.
    3. Hole das nächste index/Element-Paar aus der map.
    4. goto 1) 😉


  • pumuckl schrieb:

    1. goto 1) 😉

    Iiih, goto!



  • pumuckl schrieb:

    Naja:

    1. nimm die Elemente bis zum ersten/nächsten Index in der map aus dem originalen Polygonzug, schmeiße sie in den neuen Polygonzug.

    mein problem ist ja gerade wie ich erfrage was im ersten welement steht.

    int pos[m]=MapTyp.find(m);
    					if (pos[m]!=MapTyp.end())
    

    m steht für eine schleife for (int m=0;m...
    irgendwie so? oder? aber pos ist ja kein int is des n array? oder n vector oder was??



  • Schau dir mal Iteratoren an. Beim std::vector magst du dich noch drum drücken können, bei std::map sicher nicht.

    for (auto mapIter = map.begin(); mapIter != map.end(); ++mapIter)
    {
      auto indexOfNextSplitSegment = mapIter->first;
      auto& splitPoint = mapIter->second;
      auto& splitSegment = polygonZug[indexOfNextSplitSegment];
    
      splitSegmentAtPoint(splitSegment, splitPoint);
    
      /* ... */
    };
    

Anmelden zum Antworten