Lower_bound给出了其他结果

Lower_bound gives other result

本文关键字:其他 结果 bound Lower      更新时间:2023-10-16

在 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()的调用以解决问题。

您的代码具有未定义的行为

您正在创建一个包含 5ints 的std::vector然后clear()向量,这会将其大小设置回 0。

然后运行一个循环,该循环访问超出矢量大小范围的矢量元素。此时,您的代码具有未定义的行为。任何事情都可能发生。您的代码可能会崩溃。您的代码可能会损坏内存。

然后你在向量上调用std::lower_bound(),所以它返回end迭代器,它与begin迭代器相同,所以它们之间的距离是 0,这就是你打印出来的。

您只需摆脱对clear()的调用,然后您的代码将按预期工作。

相关文章: