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

标签 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 的来源。

最佳答案

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

你可以通过以下方式解决这个问题

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

关于c++ - 如何在 C++ 中输出集合的最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55976107/

相关文章:

c++ - 从文件中删除一个以 & 开头然后有 23 个字符的字符串

c++ - 更多与eclipse cdt

c++ - 头文件中没有对构造函数的匹配函数调用调用

c++ - 关于get line和string find函数的问题

c++ - C++代码设计中的多代理系统

c++ - 嵌套模板与移位运算符

c++ - "loop"中的 "loop device"是什么意思?

c++ - C/C++运行时从何而来?

c++ - "move semantics"和 "rvalue reference"的 Visual Studio 实现

c++ - 在初始化列表中初始化一个常量大小的数组