我正在寻找一个方便的选项来从只支持前向遍历的容器/范围中获取最后一个元素,这意味着我不能做std::prev(std::end())
之类的事情。现在我唯一的想法是:
const std::forward_list<int> list{1, 2, 3, 4, 5};
auto it = list.cbegin();
std::advance(it, std::distance(it, list.cend()) - 1);
std::cout << *it << std::endl;
有没有更方便的方法到达前向遍历范围的最后一个元素?Boost是受欢迎的。
2条答案
按热度按时间u59ebvdq1#
创建一个辅助函数,迭代直到下一个函数结束
jv4diomz2#
我喜欢Mooing Duck的答案,但我认为一个处理空列表的小调整会很好。虽然通过契约禁止这种情况没有什么错,但标准库中的许多函数都通过契约施加了约束。
但要回答你的问题。..
有没有更方便的方法到达前向遍历范围的最后一个元素?
......不......一般没有更方便的方法。您需要遍历前向列表以到达最后的元素。(假设你不能缓存迭代器到最后一个元素。)