You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++遍历list对比Vector2f位置:advance/next使用报错求助

嘿,我来帮你搞定这个问题~

首先得说清楚你代码里的核心错误:你用m_positions.front()拿到的是列表第一个元素的引用(也就是sf::Vector2f类型的对象),但advance和next都是用来操作迭代器的函数,它们根本不认识Vector2f,这就是报错的原因啦。

你的需求很明确:拿第一个位置和列表里剩下的所有位置对比,看有没有相等的。那我们换个正确的思路来实现:

  1. 先安全地获取起始位置(记得先判断列表非空,不然front()会出问题)
  2. 直接从列表的第二个元素开始遍历,这样就不用手动跳过第一个元素了
  3. 逐个对比每个元素和起始位置,找到相等的就返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:25:08