2015-01-06 33 views
-1

我有一個循環遍歷每個鍵和每個鍵的值。我爲每個點創建一個RoadSegment,並且想要使用這些值來設置RoadSegment的座標。要做到這一點,我需要迭代的當前vec3以及序列中的下一個vec3。存儲當前和下一個迭代器

是否有下一次迭代存儲的序列中,這樣我可以參考值的方式(*下)。第二 我試圖創建另一個的std ::多重映射:迭代下 ,然後設置下一= mapit地圖++但似乎操縱mapIt值爲下面的循環,所以下一個在前面是不一樣的mapIt在以下循環

非常感謝您的幫助。

for(int i = 0; i < m_genRoads->getKeyValueData().size(); i++) 
{ 
    int numberDesired = m_genRoads->getMultimapData().count(i) - 1; 

    std::multimap<int, glm::vec3>::iterator mapIt; 
    std::multimap<int, glm::vec3>::iterator next; 
    std::pair<std::multimap<int, glm::vec3>::iterator, std::multimap<int, glm::vec3>::iterator> it; 

    it = m_genRoads->getMultimapData().equal_range(i); 

    for(mapIt = it.first; mapIt != it.second; mapIt++) 
    { 
     next = mapIt++; 

     int distance = std::distance(it.first, mapIt); 

     if(distance != numberDesired) 
     { 
      std::cout<<"MAKE ROAD SEGMENT"<<std::endl; 
      RoadSegement* roadSegmentPointer = new RoadSegement(); 
      **roadSegmentPointer->setYcoord((*mapIt), (*next)); 
      roadSegmentPointer->setXcoord((*mapIt));** 
      m_segmentArray.push_back(roadSegmentPointer); 
     } 

     else 
     { 
      std::cout<<"..................."<<std::endl; 
      continue; 
     } 

回答

0

閱讀有關預增量和後增量操作員如何工作。具體而言,後增量(mapIt++)將將next設置爲當前值mapIt,然後增量mapIt。在實踐中,就好像你已經交換了兩個,這樣next指向當前對象,mapIt指向下一個對象。 另外,當循環繼續時,mapIt++會出現跳過的下一個對象!我敢打賭,你不打算這樣做。

for (mapIt = it.first; mapIt != it.second; mapIt++) 
{ 
    next = mapIt; 
    ++next; // note that preincrement is generally faster for iterators 
    if (next == it.second) { 
     // Uh oh, next is pointing to your end object, so there is no next object! Now what?? 
    } 
    /* do work */ 
}