c++ - 使用 end() 迭代到 std::vector 的最后一个元素--

标签 c++ c++11 vector stl

我有一个 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/

相关文章:

c++ - 如何使用智能指针对象执行成员函数指针?

c++ - STL 数据结构的输出参数与堆栈返回值的效率

python - Python中两个n维向量之间的角度

c++ - 为什么我的 getline 不能正确读取 .csv 文件?

c# - 获取非项目文件的FileCodeModel

c++ - 带有 'using' 的可变参数模板和类型定义

c++ - 管理由 `std::bind` 绑定(bind)的成员函数的生命周期

c++ - 保留后使用 std::vector::data

c++ - 删除 vector 中指针的方法 [C++]

c++ - 使用内联汇编器时编译器的详细输出?