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

C++ std::find_if返回迭代器与预定义vector iterator赋值不匹配报错

问题根因

GetAdjacentStates()的返回值是const std::vector<FSM_StateBase*>&类型,对const容器调用begin()/end()方法返回的是const_iterator,而非普通的iterator。你预定义的it是std::vector<FSM_StateBase*>::iterator类型,两者类型不匹配因此触发赋值报错。
报错信息里的类型差异也对应了这个问题:左侧普通迭代器的底层类型是FSM_StateBase**,允许通过迭代器修改vector中存储的指针值;右侧const迭代器的底层类型是FSM_StateBase* const*,禁止通过迭代器修改vector中存储的指针值,两者属于不同类型,无法直接赋值。

解决方案
  • 方案1(推荐):直接修改it的类型为const_iterator即可,完全满足你把迭代器定义放在for循环外的需求,迭代器本身支持重复赋值,不会产生额外的分配开销:
// 将原定义修改为
std::vector<FSM_StateBase*>::const_iterator it;

你当前的逻辑只是查找未校验的状态,不需要修改vector中存储的指针值,使用const_iterator完全符合使用场景,同时也不会破坏GetAdjacentStates的const封装性。

  • 方案2(不推荐):修改GetAdjacentStates的返回值为非const引用,该方案会破坏类的封装性,允许外部代码直接修改状态类内部的邻接状态列表,除非有明确的修改需求否则不要使用。

另外补充说明:迭代器是非常轻量的对象,就算你在循环内部用auto定义迭代器,产生的开销几乎可以忽略,不会对性能造成可感知的影响。

内容的提问来源于stack exchange,提问作者glades

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:36:03