我很难在shared_ptr
之后从vector
引用找到的std::find
。有人可以解释为什么会这样吗?
extern std::vector< shared_ptr<King::Actor> > selected
foo(const std::vector<std::shared_ptr<Actor>> &playerUnits)
{
std::vector<std::shared_ptr<Actor>>::const_iterator result;
result = std::find(std::begin(playerUnits), std::end(playerUnits), selected.back());
if (result != std::end(playerUnits))
return *std::next(result); // found
return nullptr;
}
enter code here
最近的答案是https://stackoverflow.com/questions/301959/vector-iterator-not-dereferencable#= 我相信它既找到了它,也没有找到向量的结尾,但是它仍然报告不可撤消。
答案 0 :(得分:2)
if (result != std::end(playerUnits))
return *std::next(result); // found
如果找到的结果是最后一个,则std::next
产生end
,然后将其取消引用。