来自C MultiSet Lower_bound的意外输出
unexpected output from C++ multiset lower_bound
奇怪的原因为什么下面代码返回 1
?我从不将1
插入multiset
容器中。
#include <iostream>
#include <set>
int main ()
{
std::multiset<int> mymultiset;
std::multiset<int>::iterator itlow;
mymultiset.insert(-3);
itlow = mymultiset.lower_bound (3);
std::cout << *itlow << endl; // output 1
return 0;
}
mymultiset.lower_bound(3)
返回3
可以使用的容器中的最低位置,这在容器的末端。因此,itlow
等于mymultiset.end()
,并且不可用。std::cout << *itlow
具有未定义的行为。
您正在尝试获得他的下限为3的迭代器,而最大值为-3。因此,您有一个结束迭代器,他的价值不确定。您应该使用 multiset::begin()
作为迭代器,或者放置不太温和的 itlow = mymultiset.lower_bound (-4);
。
嗨,要澄清我的理解我有一个包含1和5。
的多键mset.insert(1);
mset.insert(5);
auto it = s.lower_bound(6);
cout<<*it<<endl;
现在,从上面的答案来看,我将获得2个,因为这是值6可以安装在容器内的位置。我是吗?
接下来,如果我搜索值4,则获得5。在这里,我认为迭代器没有达到mset.end()。我是吗?
谢谢
相关文章:
- 字符串比较中的意外输出
- 来自 decltype 的意外输出类型
- 字符数组到十六进制字符串的转换 - 意外输出
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用后序遍历递归的深度优先搜索会产生意外输出
- C++的意外输出
- 贝金纳C++练习解决方案的意外输出
- 无效* 转换获得意外输出
- 以下程序的意外输出
- 意外输出:矢量矢量(功率集)
- 基本 int 数组提供意外输出
- 线程的意外输出
- 减法中的意外输出
- 带有左移操作员C 的意外输出
- C strncpy意外输出
- 意外输出..函数绑定在虚拟表中的发生方式
- 星号的意外输出
- 已编译的 protobuf 文件的意外输出路径
- 打印对象矢量的意外输出
- 递归函数用于计算 n 个数字之和的意外输出