我有一个循环遍历每个键的每个键,然后遍历这些键的每个值。我为每个点创建一个RoadSegment,并希望使用这些值来设置RoadSegment的坐标。要做到这一点,我需要迭代开启的当前vec3以及序列中的下一个。
有没有办法在序列中存储下一个迭代,以便我可以引用值(* next).second 我尝试过创建另一个std :: multimap :: iterator 然后设置next = 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 :(得分:0)
了解preincrement和postincrement运算符的工作原理。特别是,后增量(mapIt++
)会将next
设置为mapIt
的当前值,然后增加mapIt
。在实践中,就好像你已经交换了两个,以便next
指向当前对象,mapIt
指向下一个对象。 此外,当循环继续时,mapIt++
将导致您跳过下一个对象!我敢打赌你不打算这样做。< / p>
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 */
}