C ++迭代列表来比较位置

时间:2018-05-09 02:28:14

标签: c++ list iteration

我有一个名为m_positions的Vector2f位置列表,我试图将第一个位置与除自身以外的所有其他位置进行比较。

目前,我获得了前两次的位置(startPositionotherPositions),以便稍后进行比较。

然后它在列表中进行迭代,并尝试使用advance或next来获取otherPositions到第二组,但两者都会导致错误,所以我不太确定如何执行此操作

最后,它会比较startPositionotherPositions的x和y值,以检查它们是否相同。

    auto startPosition = m_positions.front();
    auto otherPositions = m_positions.front();

    for(auto it = m_positions.begin(); it != m_positions.end(); ++it)
    {
        //advance (otherPositions, 1);
        //next (otherPositions, 1);

        if(otherPositions != m_positions.back())
        {
            if(startPosition == otherPositions)
            {
                return 1;
            }
        }
    }

提前错误:

错误:没有名为' difference_type'在' struct std :: iterator_traits>' |

错误:没有匹配函数来调用' __ iterator_category(sf :: Vector2&)' |

错误:没有名为' iterator_category'在' struct std :: iterator_traits>' |

下一个错误:

错误:没有匹配函数来调用' next(sf :: Vector2&,int)' |

错误:没有名为' difference_type'在' struct std :: iterator_traits>' |

1 个答案:

答案 0 :(得分:1)

std::advance函数需要迭代器作为第一个参数,而不是对值的引用。

此:

auto otherPositions = m_positions.front();

返回对列表中第一项的引用,而不是第一项的迭代器。

如果要获取第一个项目的迭代器,则可以执行以下操作:

auto otherPositions = m_positions.begin();

然后在循环中,如果要测试值,则取消引用迭代器并使用所需的值对其进行测试:

if(*otherPositions != m_positions.back())

但是我敢打赌,你可以简单地完成这项工作来完成原始代码试图做的事情:

#include <algorithm>
//...
auto start = m_positions.begin();
auto iter = std::find(std::next(start), m_positions.end(), 
                      m_positions.front());
if (iter != m_positions.end())
   return 1;