如果我得到一个vector :: end迭代器,然后将一个新元素推回到同一个向量,那么到底的迭代器是什么,会成为最后一个元素的迭代器?
如果这不起作用,是否有一种简单的方法可以将迭代器用于C ++中向量的最后一个元素?
答案 0 :(得分: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::advance
或std::prev
。