向量迭代器在std :: shared_ptr <>中不可引用

时间:2018-09-03 23:04:02

标签: c++ c++11

我很难在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#= 我相信它既找到了它,也没有找到向量的结尾,但是它仍然报告不可撤消。

1 个答案:

答案 0 :(得分:2)

   if (result != std::end(playerUnits))
        return *std::next(result); // found

如果找到的结果是最后一个,则std::next产生end,然后将其取消引用。