【发布时间】:2016-08-29 06:37:28
【问题描述】:
我有一个std::vector,我想要iterator 到向量中的最后一个元素;我将存储此迭代器以供以后使用。
注意:我想要一个迭代器引用,而不是 std::vector::back。因为我希望以后能够从std::vector::begin 计算这个对象的索引。
以下是我将迭代器获取到最后一个元素的逻辑:
std::vector<int> container;
std::vector<int>::iterator it = container.end()--;
由于std::vector::end 的时间复杂度为 O(1),有没有更好的方法来做到这一点?
【问题讨论】:
-
我看不出有什么问题。那么问题是什么?
-
您需要
--container.end()而不是container.end()--。此外,您需要先确保容器不是空的,否则您将有未定义的行为。 -
啊哈,我看到通过
std::vector<int>::iterator it = container.end()--我会得到end迭代器然后递减迭代器 -
除了计算最后一个元素的索引之外,你还打算用迭代器做什么?如果不出意外,您可以只存储索引。无论哪种方式,迭代器或索引在您实际使用它们时可能已经无效。
-
如果您以一种使索引无效的方式弄乱了向量的内容,那么这肯定也会使迭代器无效。