C 迭代器到集合的最后一个元素
C++ iterator to last element of a set
我在C
中具有以下代码#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> a;
int n;
for(int i=0;i<3;i++){
cin>>n;
a.insert(n);
}
cout << *a.end();
return 0;
}
为什么它总是打印" 3",而不是集合中最伟大的元素?用cout << *--a.end();
替换cout << *a.end();
的工作正常。
只需使用 *a.rbegin()
指向集合中的最后一个元素
*a.end()
未定义的行为。在C 迭代术语中," end"并不意味着与"最后一个元素"。
用
cout << *--a.end();
替换cout << *a.end();
的工作正常。
考虑反向迭代器:*a.rbegin()
。
请记住,begin()
和rbegin()
仅在容器不为空的情况下返回可返回的迭代器。对于空容器,begin() == end()
和rbegin() == rend()
。
为什么它总是打印" 3",而不是最大的元素 设置?
因为 a.end()
是一个过去 vector的末端。它没有任何有效的数据,它是向量末端的标记。如:
for(auto i = a.begin(); i != a.end(); ++i)
// do stuff with i
编辑:(感谢Nathan)删除a.end()
产生可怕的未定义行为。一切都可能发生:获取3
,获得集合中的最后一个元素,甚至可以取消X-MAS !!!
找到集合的最后一个元素,我们可以做的就是使用迭代器指向持续的效果,然后将迭代器降低以达到最后一个元素作为set.end.end。()表示指向集合末端的迭代器。
auto it = s.end();
it--;
cout<<(*it)<<endl;
set<int>s
您也可以使用*prev(s.end())
相关文章:
- lower_bound()返回最后一个元素
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 仅显示链表的最后一个元素
- push_back通过自行创建的对象获取最后一个元素的向量
- 使用 map.end() 访问 map 的最后一个元素
- 如何知道地图中的最后一个元素是否被删除?
- std::矢量保存 只推送最后一个元素
- 反转后不返回最后一个元素
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 在 QListView 中显示最后一个元素
- C++:在进行切片时对迭代器的约定,特别是对于访问最后一个元素并最终将其删除
- 遍历列表包含排除最后一个元素的内容
- 如何打印第一个和最后一个元素的和,然后打印第二个和倒数第二个元素的总和,依此类推
- C++链表最后一个元素的迭代器?
- 这种获取模板参数包中最后一个元素的方法是否有隐藏的开销?
- 使用 STL 交换堆栈 C++ 中的第一个和最后一个元素
- 数组:如何在指定索引之前显示数组的第一个和最后一个元素以及数组元素的差异?
- 你能pop_back一个向量,并且仍然使用迭代器到最后一个元素吗?
- 如何使用第一个、中间和最后一个元素的中位数正确分区?