C++迭代器到链表的最后一个元素?

cns*_*nst 0 c++ iterator list listiterator

我想得到::iterator最后一个元素list.

我的理解是你可以把迭代器带到.front()列表中.begin(),但是.back()呢?由于列表边界不包含最终元素,.end()因此迭代器将超过back()列表元素.

我尝试使用.rbegin(),逻辑上似乎正是我想要的,但它似乎返回一个reverse_iterator类型,这导致我的代码不匹配的类型.

Ric*_*ges 6

任何双向容器的算法都是相同的:

#include <list>
#include <stdexcept>
#include <iostream>
#include <vector>
#include <set>


template<typename Container>
auto iter_to_last(Container&& cont)
{
    auto last = std::end(cont);
    if (last == std::begin(cont))
    {
        throw std::invalid_argument("container is empty");
    }
    return std::prev(last);
}

int main()
{
    auto l = std::list<int> { 1, 2, 3 };
    std::cout << *iter_to_last(l) << std::endl;
    std::cout << *iter_to_last(std::set<int> { 1, 2, 3 }) << std::endl;
    std::cout << *iter_to_last(std::vector<int> { 1, 2, 3 }) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

预期产量:

3
3
3
Run Code Online (Sandbox Code Playgroud)