迭代器是向量的最后一个元素

时间:2013-09-10 14:36:46

标签: c++ vector iterator

我需要获得std::vector中最后一个元素的迭代器。

已知end()方法返回一个迭代器,引用向量容器中的past-the-end元素。我可以使用end() - 1来实现我需要的吗?

据我所知,我不能使用back()方法,因为它返回一个引用。

5 个答案:

答案 0 :(得分:8)

最简单的可能是your_vec.rbegin()

答案 1 :(得分:8)

鉴于您知道/已检查过该向量是否为空且C ++ 11是一个选项,您可以使用std::prev

auto it = std::prev( your_vector.end() ); // or .cend() if a const_iterator is OK

另请注意,使用rbegin()会返回反向迭代器,这与常规迭代器不同。

答案 2 :(得分:3)

那是rbegin()迭代器。例如:

int main()
{
    std::vector<int> v = {0,1,2,3};

    for(auto& it = v.rbegin() ; it != v.rend() ; ++it)
        std::cout << *it << " ";
}

输出结果为:

  

3 2 1 0

答案 3 :(得分:0)

您可以使用reverse_iteratorsvec.rbegin()会给你reverse_iterator指向向量中的最后一个元素。更多相关信息:http://en.cppreference.com/w/cpp/iterator/reverse_iterator

答案 4 :(得分:0)

你需要什么迭代器?如果是为了迭代 回到前面,你可以使用反向迭代器(rbeginrend)。如果它是一个期望迭代器的函数(for 例如,因为您希望它遍历除最后一个之外的所有内容 element),然后你可以在向量上使用end() - 1。这将 但是,只能处理随机访问迭代器;对于其他类型, 你将需要std::prev(如果你有C ++ 11)或者 相当于你的工具包(前C ++ 11):

template <typename BidirectionalIterator>
BidirectionalIterator
prev( BidirectionalIterator it )
{
    -- it;
    return it;
}

(如果您还没有,并且没有使用C ++ 11,请将其添加到 你的工具包。)