我需要获得std::vector
中最后一个元素的迭代器。
已知end()
方法返回一个迭代器,引用向量容器中的past-the-end元素。我可以使用end() - 1
来实现我需要的吗?
据我所知,我不能使用back()
方法,因为它返回一个引用。
答案 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_iterators
。 vec.rbegin()
会给你reverse_iterator
指向向量中的最后一个元素。更多相关信息:http://en.cppreference.com/w/cpp/iterator/reverse_iterator
答案 4 :(得分:0)
你需要什么迭代器?如果是为了迭代
回到前面,你可以使用反向迭代器(rbegin
,
rend
)。如果它是一个期望迭代器的函数(for
例如,因为您希望它遍历除最后一个之外的所有内容
element),然后你可以在向量上使用end() - 1
。这将
但是,只能处理随机访问迭代器;对于其他类型,
你将需要std::prev
(如果你有C ++ 11)或者
相当于你的工具包(前C ++ 11):
template <typename BidirectionalIterator>
BidirectionalIterator
prev( BidirectionalIterator it )
{
-- it;
return it;
}
(如果您还没有,并且没有使用C ++ 11,请将其添加到 你的工具包。)