当我将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的来源。
答案 0 :(得分:3)
任何标准容器的end/cend/rend/crend
成员函数 not 都不会将迭代器返回到序列的最后一个元素。它们返回一个语义值,在语义上等同于过去。取消引用它们是未定义的行为,因此您不能依赖此示例中打印出的任何结果。
您可以通过以下方式解决此问题
cout << *std::prev(s.end());