使用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*
(这将是有效的),则上面的第一种形式是不成形的。不管怎样,后两者都有效,因此更可取。
您有rbegin
,它可以满足您的需求
cplusplus参考
auto last = container.rbegin();
执行此操作的方式会给您提供错误的迭代器,因为后增量直到赋值后才更改值。
总是这样:
auto it = std::prev(container.end());
请记住首先检查容器是否为空,以便迭代器存在于有效范围内。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- lower_bound()返回最后一个元素
- 获取向量C++中第一个值和最后一个值的和
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 将 vector<vector> 的最后一个元素移动到<int>开头
- 在std :: vector中找到最后一个非零元素
- C++中的 vector 只能读取最后一个元素
- vector.back() 可以用来为向量的最后一个元素赋值吗?
- 当第一个 itr 在最后一个 itr 之后时,std::vector 范围构造函数的官方行为是什么?
- 检查该元素是std :: vector中的第一个还是最后一个
- vector.erase-它总是删除我的最后一个元素
- 使用end()--迭代到std::vector的最后一个元素
- std::vector::erase删除最后一个元素而不是第一个元素
- vector::erase不会擦除所需的元素,而是从向量中擦除最后一个元素
- vector的最后一个对象覆盖所有对象
- c++ STL vector.erase()总是删除最后一个元素
- std::vector size()-1 ALWAYS给出最后一个元素的索引吗?
- 指向vector的指针只返回vector的最后一个值
- 在vector的最后一个元素中插入属性
- 查找std::vector中满足条件的最后一个元素