我在std::find
后从vector
中取消引用找到的shared_ptr
时遇到问题。有人可以解释为什么会这样吗?
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#=我相信它既找到了它,又找到了向量的末尾,但它仍然报告不可取消引用。
if (result != std::end(playerUnits))
return *std::next(result); // found
如果找到的结果是最后一个,std::next
将生成end
,然后取消引用。