2
如果我得到一个vector :: end迭代器,然后将一个新元素推回到同一个矢量,到底什么是迭代器成为最后一个元素的迭代器?C++中的矢量迭代器
如果这不起作用,有没有一种简单的方法获取迭代器到C++中的向量的最后一个元素?
如果我得到一个vector :: end迭代器,然后将一个新元素推回到同一个矢量,到底什么是迭代器成为最后一个元素的迭代器?C++中的矢量迭代器
如果这不起作用,有没有一种简单的方法获取迭代器到C++中的向量的最后一个元素?
这不起作用 - 添加(或删除)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::advance
或std::prev
。
如果引用将代替迭代器,则'back()'返回对非空向量的最后一个元素的引用。 – Casey
我正在使用迭代器来做指针算术,以便通过执行'index = iterator_to_element - iterator_to_beginning'获得迭代器元素的索引。 – wolf
http://stackoverflow.com/q/6438086/560648 –