8

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

众所周知end(),方法返回一个迭代器,该迭代器引用向量容器中的末尾元素。我可以通过使用实现我需要的东西end() - 1吗?

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

4

5 回答 5

10

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

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

另请注意, usingrbegin()返回一个反向迭代器,这与普通迭代器不同。

于 2013-09-10T14:44:54.620 回答
9

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

于 2013-09-10T14:40:34.180 回答
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

于 2013-09-10T14:45:30.157 回答
0

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

于 2013-09-10T14:43:10.783 回答
0

你需要迭代器做什么?如果是从后向前迭代,则可以使用反向迭代器(rbegin, rend)。如果它是一个需要迭代器的函数(例如,因为您希望它遍历除最后一个元素之外的所有元素),那么您可以end() - 1在向量上使用。但是,这只适用于随机访问迭代器;对于其他类型,您将需要std::prev(如果您有 C++11)或工具包中的等价物(C++11 之前):

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

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

于 2013-09-10T14:50:29.143 回答