我有一个名为m_positions
的Vector2f位置列表,我试图将第一个位置与除自身以外的所有其他位置进行比较。
目前,我获得了前两次的位置(startPosition
和otherPositions
),以便稍后进行比较。
然后它在列表中进行迭代,并尝试使用advance或next来获取otherPositions
到第二组,但两者都会导致错误,所以我不太确定如何执行此操作
最后,它会比较startPosition
和otherPositions
的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>' |
答案 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;