2014-01-16 96 views
2

如果我得到一个vector :: end迭代器,然后将一个新元素推回到同一个矢量,到底什么是迭代器成为最后一个元素的迭代器?C++中的矢量迭代器

如果这不起作用,有没有一种简单的方法获取迭代器到C++中的向量的最后一个元素?

+1

如果引用将代替迭代器,则'back()'返回对非空向量的最后一个元素的引用。 – Casey

+0

我正在使用迭代器来做指针算术,以便通过执行'index = iterator_to_element - iterator_to_beginning'获得迭代器元素的索引。 – wolf

+0

http://stackoverflow.com/q/6438086/560648 –

回答

6

这不起作用 - 添加(或删除)std::vector的元素会使所有迭代器都无效。为了得到一个迭代的最后一个元素,你可以用减法:

std::vector<T> vec; 
vec.push_back(something); //doing this so that the vector is not empty and the decrement is valid 
auto itToLast = vec.end() - 1; 

取决于你需要做什么,你也可以考虑rbegin(),这给反向迭代器的最后一个元素(增加这样的迭代器将它移动到最后一个,等等)。

最后,减法仅适用于随机访问迭代器(std::vector提供了那些,但例如std::list没有)。对于其他迭代器,可以使用std::advancestd::prev