繁体   English   中英

迭代器使用end()持续std :: vector的元素 -

[英]Iterator to last element of std::vector using end()--

我有一个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),有没有更好的方法呢?

我认为你的意思是:

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<T>::iterator只是T* (这将是有效的),则上面的第一个表单是格式错误的。 第二个工作无论如何,所以更可取。

你这样做的方式会给你错误的迭代器,因为在赋值之后post增量不会改变值。

总有这样的:

auto it = std::prev(container.end());

请记住首先检查容器是否为空,以便迭代器存在于有效范围内。

你有rbegin做你需要的

cplusplus参考

auto last = container.rbegin();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM