gpt4 book ai didi

c++ - 相对于结束迭代器的解引用

转载 作者:太空宇宙 更新时间:2023-11-04 14:09:12 25 4
gpt4 key购买 nike

这是取消引用范围内最后一项的正确方法吗?

std::string getName(Foos::const_iterator& begin, Foos::const_iterator& end)
{
return boost::apply_visitor(Detail::NameGetterForFoo(),*--end);
}

假设我总是在 vector 中有一些东西。

最佳答案

如果您总是确定容器中有东西,请在 end 上使用 std::prev 获取它之前的迭代器,然后递减它。以下是我将如何编写您的代码块:

std::string getName(Foos::const_iterator begin, Foos::const_iterator end)
{
// Assert: begin != end.
return boost::apply_visitor(Detail::NameGetterForFoo(),*std::prev(end));
}

编辑:容器也支持 .back() 成员函数。如果您传入容器而不是迭代器范围,则可以改用它。这可能会有所帮助,因为在这段代码中,您真正想要的似乎只是容器的最后一个元素。例如

std::string getName(Foos const& foos)
{
// Assume Foos is a standard container with front() and back() and that
// it is non-empty.
return boost::apply_visitor(Detail::NameGetterForFoo(), foos.back());
}

关于c++ - 相对于结束迭代器的解引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15571135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com