我需要得到一个迭代器到 a 中的最后一个元素std::vector
。
众所周知end()
,方法返回一个迭代器,该迭代器引用向量容器中的末尾元素。我可以通过使用实现我需要的东西end() - 1
吗?
据我了解,我不能使用back()
方法,因为它返回一个引用。
鉴于您知道/已经检查过向量不为空并且 C++11 是一个选项,您可以使用std::prev:
auto it = std::prev( your_vector.end() ); // or .cend() if a const_iterator is OK
另请注意, usingrbegin()
返回一个反向迭代器,这与普通迭代器不同。
最简单的可能是your_vec.rbegin()
。
那是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
您可以使用reverse_iterators
. vec.rbegin()
会给你reverse_iterator
指向向量中的最后一个元素。有关它的更多信息: http: //en.cppreference.com/w/cpp/iterator/reverse_iterator
你需要迭代器做什么?如果是从后向前迭代,则可以使用反向迭代器(rbegin
,
rend
)。如果它是一个需要迭代器的函数(例如,因为您希望它遍历除最后一个元素之外的所有元素),那么您可以end() - 1
在向量上使用。但是,这只适用于随机访问迭代器;对于其他类型,您将需要std::prev
(如果您有 C++11)或工具包中的等价物(C++11 之前):
template <typename BidirectionalIterator>
BidirectionalIterator
prev( BidirectionalIterator it )
{
-- it;
return it;
}
(如果您还没有它,并且没有使用 C++11,请将其添加到您的工具包中。)