如何在C ++中输出集合的最后一个元素?

时间:2019-05-03 19:35:11

标签: c++

当我将3个元素插入集合并调用*s.end()时,我得到正确的3输出,如下所示:

set<int> s; 

s.insert(1);
s.insert(2);
s.insert(3);
cout << *s.end();

然后我擦除2个值并按如下所示插入11:

s.erase(3);
s.erase(2);

s.insert(11);

cout << *s.end();

*s.end()的新预期输出应为11。但是输出显示为2。从这2的来历没有任何线索。有什么想法吗?

预期输出:3 11
实际输出:3 2

目前尚不清楚2的来源。

1 个答案:

答案 0 :(得分:3)

任何标准容器的end/cend/rend/crend成员函数 not 都不会将迭代器返回到序列的最后一个元素。它们返回一个语义值,在语义上等同于过去。取消引用它们是未定义的行为,因此您不能依赖此示例中打印出的任何结果。

您可以通过以下方式解决此问题

cout << *std::prev(s.end());