我有一个 std::vector
并且我希望 iterator
指向 vector 中的最后一个元素;我将存储此迭代器供以后使用。
注意:我想要一个指向它的迭代器引用,而不是 std::vector::back
。因为我希望稍后能够从 std::vector::begin
计算此对象的索引。
以下是我将迭代器获取到最后一个元素的逻辑:
std::vector<int> container;
std::vector<int>::iterator it = container.end()--;
由于 std::vector::end
具有 O(1) 时间复杂度,是否有更好的方法来做到这一点?
最佳答案
我想你的意思是:
std::vector<int>::iterator it = --container.end();
std::vector<int>::iterator it = container.end() - 1;
std::vector<int>::iterator it = std::prev(container.end());
您无意中返回了 end()
.但是所有这些的问题是当 vector 为空时会发生什么,否则它们都会在恒定时间内做正确的事情。尽管如果 vector 为空,则无论如何都没有最后一个元素。
存储迭代器时也要小心——它们可能会失效。
请注意,如果 vector<T>::iterator
只是T*
(这将是有效的),上面的第一种形式是错误的。后两个不管用,所以更可取。
关于c++ - 使用 end() 迭代到 std::vector 的最后一个元素--,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37017302/