【发布时间】:2019-09-06 19:50:48
【问题描述】:
在不提供back() 成员函数的容器中返回最后一个元素的最佳方法是什么,例如std::set?
既然end() 方法返回一个迭代器指向容器结束后的第一个元素,那么在取消引用之前获取最后一个元素以递减迭代器的唯一方法是什么?
如:
std::set<int> set = {1,2,3,4,5};
int end = *(set.end());
int beforeEnd = *(--set.end());
std::cout << "set.end() -> " << end << std::endl;
std::cout << "--set.end() -> " << beforeEnd << std::endl;
但是,这些都返回:
set.end() -> 5
--set.end() -> 5
这是获取最后一个元素的正确方法吗?为什么它们返回相同的值?
【问题讨论】:
-
int end = *(set.end());是未定义的行为。 -
您不能在 any 容器中取消引用
end迭代器
标签: c++ algorithm c++11 iterator containers