Lower_bound给出了其他结果
Lower_bound gives other result
在 C++ 中测试 lower_bound 函数 在 Ideone 中运行此代码后,我得到了奇怪的结果。 我做错了什么?这里的自动使用正确吗?
法典:
vector<int> a(5);
a.clear();
rep(i,0,5){
a[i]=i+1;
cout<<a[i]<<' ';
}
cout<<endl;
auto pos = lower_bound(a.begin(),a.end(),3);
cout<< (pos-a.begin())<<'n';
输出:
1 2 3 4 5
0
为什么?? 预期输出 :
2
我做错了什么我不明白。 似乎是基本的C++代码
此行创建五个元素的向量:
vector<int> a(5);
下一行删除所有五个元素,将大小设置为零:
a.clear();
因此,循环写入超出向量的end()
,触发未定义的行为。这不会扩展矢量。
实际上,您在空序列上调用lower_bound
,因此pos == a.begin()
.删除对clear()
的调用以解决问题。
您的代码具有未定义的行为。
您正在创建一个包含 5int
s 的std::vector
,然后clear()
向量,这会将其大小设置回 0。
然后运行一个循环,该循环访问超出矢量大小范围的矢量元素。此时,您的代码具有未定义的行为。任何事情都可能发生。您的代码可能会崩溃。您的代码可能会损坏内存。
然后你在空向量上调用std::lower_bound()
,所以它返回end
迭代器,它与begin
迭代器相同,所以它们之间的距离是 0,这就是你打印出来的。
您只需摆脱对clear()
的调用,然后您的代码将按预期工作。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- valgrind-hellgrind与泄漏检查的结果不同
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- Lower_bound给出了其他结果
- 我的 SonarQube C++扫描成功,但结果仅标记重复项,而没有标记其他标记的位置
- 相同的代码,不同的结果?从其他项目包含有什么问题?
- 功能模板与Variadic模板过载:Intel C 编译器版本18产生的结果不同于其他编译器.英特尔是错误的
- static_cast到其他类型,然后移动结果
- OpenCV 结果在调试/发布和其他机器之间更改
- 我想复制 (wchar_t *) 缓冲区中的数据,但我无法这样做 bcz 还有其他不兼容的类型,类型转换但没有得到结果
- 如何通过CPP判断其他程序的结果?
- 我的函数显示垃圾,其他时候它显示干净的结果
- 重载 [],但其结果在与其他运算符交互之前未解析 (C++)
- 为什么检查分配操作的结果有效,但不能与其他条件相结合
- 将curl结果中的字节组解释为其他数据类型的方法
- 是否存在一个c++函数(内置或其他),可以在不重复操作的情况下给出整数除法和模除法的结果
- 原子增量正在刷新其他缓存行(提供的代码和结果)