C++遍历list对比Vector2f位置:advance/next使用报错求助
嘿,我来帮你搞定这个问题~
首先得说清楚你代码里的核心错误:你用m_positions.front()拿到的是列表第一个元素的引用(也就是sf::Vector2f类型的对象),但advance和next都是用来操作迭代器的函数,它们根本不认识Vector2f,这就是报错的原因啦。
你的需求很明确:拿第一个位置和列表里剩下的所有位置对比,看有没有相等的。那我们换个正确的思路来实现:
- 先安全地获取起始位置(记得先判断列表非空,不然
front()会出问题) - 直接从列表的第二个元素开始遍历,这样就不用手动跳过第一个元素了
- 逐个对比每个元素和起始位置,找到相等的就返回1
修正后的代码如下:
// 先处理空列表的情况,避免未定义行为 if (m_positions.empty()) { return 0; // 或者根据你的需求返回其他值/抛出异常 } auto startPosition = m_positions.front(); // 从第二个元素开始遍历,std::next会把begin()迭代器往后移一位 for (auto it = std::next(m_positions.begin()); it != m_positions.end(); ++it) { // *it 取出迭代器指向的Vector2f元素,和起始位置对比 if (*it == startPosition) { return 1; } } // 如果遍历完所有元素都没找到相等的,返回0或者你需要的其他值 return 0;
再回头解释下你原来的问题:
otherPositions是Vector2f对象,不是迭代器,所以advance/next对它完全无效,这俩函数只接受迭代器作为第一个参数- 你原来的循环从
begin()开始,会把第一个元素和自己对比,这完全没必要,直接从第二个元素开始遍历更高效
这样改完之后,既符合你的需求,也不会再触发那些迭代器相关的报错啦~
内容的提问来源于stack exchange,提问作者Le Ginger One
相关产品推荐
相关产品推荐

