【问题标题】:store current and next iterator存储当前和下一个迭代器
【发布时间】:2015-01-06 00:07:12
【问题描述】:

我有一个循环遍历每个键,然后遍历这些键的每个值。我为每个点创建一个 RoadSegment,并希望使用这些值来设置 RoadSegment 的坐标。为此,我需要迭代正在进行的当前 vec3 以及序列中的下一个。

有没有办法在序列中存储下一次迭代,以便我可以引用值 (*next).second 我尝试下一个创建另一个 std::multimap::iterator 然后设置 next = mapIt++ 但这似乎操纵了以下循环的 mapIt 值,因此前一个循环中的 next 与以下循环中的 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;
        }

【问题讨论】:

    标签: c++ iterator multimap


    【解决方案1】:

    了解前置增量和后置增量运算符的工作原理。特别是,后增量 (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 */
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2011-08-21
      • 2018-12-06
      • 1970-01-01
      • 2011-07-23
      相关资源
      最近更新 更多